OpenCVで画像処理をする

OpenCVで画像処理をするプログラミング
ゆうすけ
ゆうすけ

OpenCVで画像処理したいです。

資格マフィア
資格マフィア

OpenCVを使うことで、様々な画像処理が簡単にできるぞ。

 

✔️ 本記事のテーマ

OpenCVの画像処理について

 

✔️ 読者さんへの前置きメッセージ

本記事は「OpenCVを使った画像処理」について書いています。

 

この記事を読むことで
「OpenCVライブラリでできる画像処理 と 画像処理プログラムの書き方」
を理解できます。

 

OpenCVは画像処理に特化したPythonライブラリです。

 

OpenCVライブラリを使うことで、
様々な画像処理をシンプルなコードで実現することができます。

 

この記事では、
そんなOpenCVライブラリでできることと、
OpenCVライブラリを使ったプログラムの書き方を解説します。

 

それでは、OpenCVライブラリの画像処理について解説していきましょう。

 

OpenCVとは?(画像処理ライブラリ)

OpenCVとは?

OpenCV (Open Source Computer Vision Library) は、
画像処理に関する機能をまとめたライブラリです。

 

OSS(オープンソースソフトウェア)として提供されているため、
無料で手軽に使うことができます。

 

主に、画像中から人の顔を検出したり、
カラー画像を白黒画像に変換する場面で使われています。

 

OpenCVライブラリの関数一覧と使い方については
【python】OpenCVの関数一覧と使い方の記事で解説しています。

 

今では「画像処理」を用いたPythonプログラミングでは
必ずと言っていいほど使用されるほどに、メジャーなライブラリです。

 

インストール自体も簡単なので、趣味や個人開発にもオススメです。

 

なお、OpenCVのインストールについては
【python】OpenCVのインストール方法の記事で解説しています。

 

OSにもよりますが、
3ステップほどでサクッとインストールすることができます。


OpenCVでできる画像処理

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による画像のグレースケール化については
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関数を使うことで、
以下のような白黒画像をつくることができます。

OpenCVの白黒画像

なお、この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関数を使うことで、以下のような反転画像をつくることができます。

OpenCVの上下反転画像

なお、上の例では上下反転になっています。

 

どのように反転させるかはcv2.flip関数の引数を以下の通りに指定することで、
自由に設定することができます。

  • flipcode = 0: 上下反転
  • flipcode > 0: 左右反転
  • flipcode < 0: 上下左右反転

▽ 左右反転

OpenCVの左右反転画像

▽ 上下左右反転

OpenCVの上下左右反転画像

 

なお、OpenCVによる画像の回転処理については
OpenCVで画像を回転させる【Python】」の記事で詳しく書いています。

 

画像をリサイズ・トリミングする

OpenCVを使えば、画像のトリミングやリサイズも自由自在です。

 

画像のリサイズはcv2.resize()を使用します。

 

import cv2


img = cv2.imread('/Users/mafia/sample.jpg')                                                                                                 
img_resize = cv2.resize(img, (300, 300))

 

このようにcv2.resize関数を使うことで、
以下のようなリサイズ画像をつくることができます。

OpenCVのリサイズ画像

なお、以下のようにPythonのリストの機能を使うことで、
指定した範囲でトリミングもできます。

img = img[0:400, 50:200]

上の例では、たて0〜400px、よこ50〜200pxの範囲で切り抜いています。

OpenCVのトリミング画像

画像から顔を検出する

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を使った顔検出の方法については
OpenCVで顔を検出する【Python】」の記事で詳しく解説しています。

 

OpenCVやPythonについてもっとスキルをつけるなら

OpenCVやPythonについてもっとスキルをつけるなら

今回は、OpenCVの画像処理について解説しました。

 

OpenCVは注目が集まっていて、いま需要の高い技術です。

 

もし、OpenCVについて独学でスキルをつけるなら、以下の書籍がオススメです。

 

この書籍はOpenCVの基礎から応用までを
丁寧にかつ詳細に解説しています。

 

OpenCVのほぼ全てを網羅しているとも言えるほどの徹底ぶりなので、
関数のリファレンスとしても使用することができます。
本記事で解説した多くの関数も掲載されています。

エンジニアとしての自身の価値をチェックする(完全無料)

エンジニアとして、

自分の価値がどれくらいのものかご存知でしょうか?

 

エンジニアとしてIT業界に身を置いていると

今の会社でずっと働くのか、フリーランスとして独立するのか …

と様々な選択肢があります。

 

どの選択肢が正解なのかを見極めるためにも、選択肢を広げるためにも

自身の価値を知っておくことはとても重要です。

 

TechClips ME では、

職務経歴書をアップロードするだけで企業からのスカウトを受けることができます。

▼▼▼▼▼

▲▲▲▲▲

しかもTechClips MEでは想定年収を企業から提示してくれるので、

自身の価値を数字で分かりやすくたしかめることができます。

 

登録はもちろん完全無料なので、一度登録してみると良いかもしれません。

 

コメント

タイトルとURLをコピーしました