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についてスキルをつけるなら、Udemyの教材がオススメです。

>> 【Pythonで学ぶ】OpenCVでの画像処理入門

 

Udemyは動画ベースで学習ができるので、
実際のコードや図解を見ながら、学習を進めることができます。

 

さらに今なら30日間返金保証がついているので、
一度購入して自分の思っていたものと違った場合は費用がかかりません。

 

この教材はOpenCVの基礎から応用まで徹底的に解説しています。

 

OpenCVライブラリについて理解するところから、実際に画像処理を行うところまでを動画で解説しているので、非常に実践的な教材です。

 

また、Pythonについて基礎から学ぶのであれば、オンラインスクールがオススメです。


オンラインスクールで学習すると、講義も分かりやすく、
サポート体制もしっかりしているので、これからPythonを学ぶ人にもオススメです。


オンラインで無料レッスンを体験することもできるので、
自分にあっているかどうかを確かめることができます。


オススメは以下の3つです。
どのスクールも無料体験が用意されているので、
契約前に自分に最適なスクールを探すことができるでしょう。

✔️オススメのプログラミングスクール ベスト3

プログラミングスクールについては「プログラミングスクールで失敗しないためには【オススメベスト3も紹介】」の記事でも紹介しています。


気になった方はぜひチェックしてみて下さい〜!

コメント

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