OpenCVTweetPythonで画像処理を行う場合、PillowやNumPy、OpenCVなど様々なライブラリが利用できる。PythonのOpenCVは画像をNumPyの配列ndarrayとして扱っており、「OpenCVでの画像処理」といって紹介されているものも、OpenCVの関数は使っておらずNumPy配列ndarrayの操作だけで完結していることが多い。NumPyで画像をndarrayとして読み込むことで同様の処理が可能。NumPyのほうがお手軽。そもそもPillowのみで事足りる場合も多々ある。OpenCVの基本的な違いと使い分けについて説明したあと、Pillow(PIL)による画像処理NumPyによる画像処理OpenCVによる画像処理について、それぞれできることの例を示す。基本的には以下のように使い分けられる。画像をNumPyの配列ndarrayとして読み込んで計算・操作するNumPy単体で画像ファイルを読み込むことはできないので、PillowやOpenCVなどと併用するOpenCVndarrayの処理に加えて、顔認識などコンピュータビジョン系の処理を行いたい場合Pillow(PIL)による画像処理リサイズやトリミング、回転、反転など基本的な処理はPillowだけでOK。Pythonの画像処理ライブラリPillow(PIL)の使い方リサイズやトリミングなどについて説明した個別記事は以下から。Pillowに関する記事一覧Pillow(PIL)を使った画像処理の例をいくつか挙げる。画像に別の画像を貼り付ける背景となる画像に別の画像を貼り付ける。矩形のまま貼り付けるのはもちろん、マスク画像を使って円形に切り抜いて貼り付けたりもできる。Pillowで画像に別の画像を貼り付けるpaste2枚の画像を合成する2枚の同じサイズの画像を合成する。上の貼り付けの例のようにマスク画像に従って任意の図形に切り抜いて合成したり、グラデーション画像をマスクとして徐々に変化するように合成することもできる。複数の画像を連結(結合)する複数枚の画像を縦や横に並べて連結画像を作成する。Pillowで画像を縦・横に連結(結合)透過png画像を作成アルファチャンネルを持つ透過png画像を生成する。上の例と同じく、任意の形にマスクすることができる。Pillowで透過png画像を作成するputalphaネガポジ反転(画素値を逆転)画素値を逆転して、ネガポジ反転した画像を生成する。大きい画像から小さいサムネイル画像を作成するのも簡単。中央を切り抜いたり、余白を付け加えて任意のサイズにしたり、円形にしたり、色々できる。複数の画像を一括で処理することも可能。円、線分など、様々な図形を描画できる。既存の画像の上に描画することも可能。Pillowで円や四角、直線などの図形を描画アニメーションgifを作成jpgやpngはもちろん、アニメーションするgif画像を作成することもできる。画像をNumPy配列ndarrayとして読み込むと、NumPyの機能を使って様々な画像処理を行うことができる。各画素値に対して算術演算を行う処理が簡単に書ける。Pillowを使って画像ファイルをNumPy配列ndarrayとして読み込む方法や、NumPy配列ndarrayを画像ファイルとして保存する方法についての詳細は、以下の記事を参照。NumPyで画像処理(読み込み、演算、保存)OpenCVを使った画像の読み込み・保存は以下の記事を参照。imwrite)NumPyを使った画像処理の例をいくつか示す。単色化NumPyでは配列の値を一括で変更できるので、例えばある色の画素値を0にしてしまうことで単色化が可能。ネガポジ反転(画素値の反転)画素値を逆転して、ネガポジ反転した画像を生成する。画素値を飛び飛びの値にして色数を減らす。NumPyで画像処理(読み込み、演算、保存)二値化処理しきい値に応じて白黒に二値化する。累乗もできるのでガンマ補正も簡単。既存の画像に対する処理だけでなく、等間隔で増加または減少する配列を生成する関数を使ってグラデーション画像を生成したりすることもできる。画像から何かを認識したり検出したりする場合はOpenCVを使う。顔検出(顔認識)顔や瞳を検出する。画像の全面または一部にモザイクをかける。顔検出と組み合わせて顔部分にモザイクをかけたりすることもできる。OpenCVで画像にモザイク処理(全面、一部、顔など)図形描画Pillowと同じく、長方形や円、線分など、様々な図形を描画できる。上の顔認識の例のように、検出した位置を図示する際などに便利。)複数の画像を連結(結合)する複数枚の画像を縦や横に並べて連結画像を作成することができる。np.tile)処理前後の画像を比較したり、係数による変化を複数枚並べて比較したりするときに使う。下は同じ画像を並べた例。