OpenCVで画像処理したいです。
OpenCVを使うことで、様々な画像処理が簡単にできるぞ。
✔️ 本記事のテーマ
OpenCVの画像処理について
✔️ 読者さんへの前置きメッセージ
本記事は「OpenCVを使った画像処理」について書いています。
この記事を読むことで
「OpenCVライブラリでできる画像処理 と 画像処理プログラムの書き方」
を理解できます。
OpenCVは画像処理に特化したPythonライブラリです。
OpenCVライブラリを使うことで、
様々な画像処理をシンプルなコードで実現することができます。
この記事では、
そんなOpenCVライブラリでできることと、
OpenCVライブラリを使ったプログラムの書き方を解説します。
それでは、OpenCVライブラリの画像処理について解説していきましょう。
OpenCVとは?(画像処理ライブラリ)
OpenCV (Open Source Computer Vision Library) は、
画像処理に関する機能をまとめたライブラリです。
OSS(オープンソースソフトウェア)として提供されているため、
無料で手軽に使うことができます。
主に、画像中から人の顔を検出したり、
カラー画像を白黒画像に変換する場面で使われています。
OpenCVライブラリの関数一覧と使い方については
「【python】OpenCVの関数一覧と使い方」の記事で解説しています。
今では「画像処理」を用いたPythonプログラミングでは
必ずと言っていいほど使用されるほどに、メジャーなライブラリです。
インストール自体も簡単なので、趣味や個人開発にもオススメです。
なお、OpenCVのインストールについては
「【python】OpenCVのインストール方法」の記事で解説しています。
OSにもよりますが、
3ステップほどでサクッとインストールすることができます。
OpenCVでできる画像処理
OpenCVでは、様々な画像処理を行うことができます。
代表的な処理を挙げてみましょう。
- 画像のグレースケール化
- 画像の白黒化
- 画像を反転する(上下・左右)
- 画像をリサイズ・トリミングする
- 画像から顔を検出する
それぞれサンプルコードを交えて解説していきましょう。
画像のグレースケール化
OpenCVを使うことで、画像のグレースケール化が関数で行えます。
画像をグレースケールにする時は、cv2.cvtColor()を使用します。
import cv2
# インプット画像の読み込み
img = cv2.imread('/Users/mafia/sample.jpg', cv2.IMREAD_COLOR)
# グレースケール化
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
このようにcvtColor関数を使うことで、
以下のようなグレースケール画像をつくることができます。
画像処理ではグレースケール画像をインプットにすることが多いので、
この関数は意外と使用頻度が高いです。
使い方を理解しておくと、画像処理プログラミングで役に立つでしょう。
なお、OpenCVによる画像のグレースケール化については
「OpenCVでグレースケール画像を簡単に作成する【Python】」の記事で詳しく解説しています。
画像の白黒化
OpenCVでは、グレースケール化だけでなく、画像の白黒化も行えます。
画像を白黒にする時は、cv2.cvtColor()を使用します。
import cv2
# インプット画像の読み込み
img = cv2.imread('/Users/mafia/sample.jpg', 0)
# 白黒化
ret, img_thresh = cv2.threshold(img, 100, 255, cv2.THRESH_BINARY)
このようにcv2.threshold関数を使うことで、
以下のような白黒画像をつくることができます。
なお、このcv2.threshold関数のインプット画像はグレースケール画像である必要があります。
カラー画像を白黒化する場合は、既に紹介したcv2.cvtColor関数を使用して、
カラー画像 → グレースケース画像 → 白黒画像
という順で変換していきましょう。
この辺の注意点も含めて、画像の二値化については
「OpenCVで二値化する方法【Python】」の記事で詳しく解説しています。
画像を反転する(上下・左右)
画像の反転もOpenCVを使えばカンタンに行うことができます。
画像の反転にはcv2.flip()を使用します。
import cv2
# インプット画像の読み込み
img = cv2.imread('/Users/mafia/sample.jpg')
img_flip = cv2.flip(img, 0)
このように、cv2.filp関数を使うことで、以下のような反転画像をつくることができます。
なお、上の例では上下反転になっています。
どのように反転させるかはcv2.flip関数の引数を以下の通りに指定することで、
自由に設定することができます。
- flipcode = 0: 上下反転
- flipcode > 0: 左右反転
- flipcode < 0: 上下左右反転
▽ 左右反転
▽ 上下左右反転
なお、OpenCVによる画像の回転処理については
「OpenCVで画像を回転させる【Python】」の記事で詳しく書いています。
画像をリサイズ・トリミングする
OpenCVを使えば、画像のトリミングやリサイズも自由自在です。
画像のリサイズはcv2.resize()を使用します。
import cv2
img = cv2.imread('/Users/mafia/sample.jpg')
img_resize = cv2.resize(img, (300, 300))
このようにcv2.resize関数を使うことで、
以下のようなリサイズ画像をつくることができます。
なお、以下のようにPythonのリストの機能を使うことで、
指定した範囲でトリミングもできます。
img = img[0:400, 50:200]
上の例では、たて0〜400px、よこ50〜200pxの範囲で切り抜いています。
画像から顔を検出する
OpenCVを使うことで、画像中から顔を検出することができます。
これはいかにも画像処理っぽいですね。
顔検出をするときは、detectMultiScaleを使用します。
import cv2
face_cascade_path = '/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml'
face_cascade = cv2.CascadeClassifier(face_cascade_path)
src = cv2.imread('/Users/mafia/sample.jpg')
src_gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(src_gray)
for x, y, w, h in faces:
cv2.rectangle(src, (x, y), (x + w, y + h), (255, 0, 0), 2)
上のコードは顔検出して、検出した部分に赤枠をつけるコードになっています。
なお、OpenCVを使った顔検出の方法については
「OpenCVで顔を検出する【Python】」の記事で詳しく解説しています。
OpenCVやPythonについてもっとスキルをつけるなら
今回は、OpenCVの画像処理について解説しました。
OpenCVは注目が集まっていて、いま需要の高い技術です。
もし、OpenCVについて独学でスキルをつけるなら、以下の書籍がオススメです。
この書籍はOpenCVの基礎から応用までを
丁寧にかつ詳細に解説しています。
OpenCVのほぼ全てを網羅しているとも言えるほどの徹底ぶりなので、
関数のリファレンスとしても使用することができます。
本記事で解説した多くの関数も掲載されています。
エンジニアとしての自身の価値をチェックする(完全無料)
エンジニアとして、
自分の価値がどれくらいのものかご存知でしょうか?
エンジニアとしてIT業界に身を置いていると
今の会社でずっと働くのか、フリーランスとして独立するのか …
と様々な選択肢があります。
どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも
自身の価値を知っておくことはとても重要です。
TechClips ME では、
職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。
▼▼▼▼▼
▲▲▲▲▲
しかもTechClips MEでは想定年収を企業から提示してくれるので、
自身の価値を数字で分かりやすくたしかめることができます。
登録はもちろん完全無料なので、一度登録してみると良いかもしれません。
コメント