OpenCVの使い方入門 画像の色反転を解説
有名ライブラリ OpenCV を使って画像の色反転処理を実施する
2020年も終わりに近づいてきました。私はあいも変わらず製造業で生産技術のシステム開発担当をしています。
近年画像処理による需要はとどまるところを知りません。ロボットにくっつけても良し,ラインにカメラを取り付けても良しで今後も需要が拡大していくことが予想できます。
今回は画像処理の代名詞の一つでもある画像の色反転についてプログラム方法を含めて解説していこうと思います。
OpenCVによる画像の色反転プログラミングを紹介 (Python)
OpenCVは非常に人気のある画像処理ライブラリで,主要な画像処理は簡単なプログラミングで実装できます。
画像処理の基本についてはこちらの記事で,OpenCVによる画像の読込などはこちらの記事で紹介していますので是非見ていってください。
さて,OpenCVによる画像の色反転方法を紹介していこうと思います。使用するプログラミング言語はPythonです。
まず,ベースとなる画像は私の個人的趣味で2020年10月時点で絶賛大人気のVTuberである常闇トワ様の画像を使用させていただきます。本当に美しいですね。私は彼女の画像を画像処理界のLennaにしたいと考えているくらいです。
こちらの画像をC:\Temp\towa.jpgという名前で保存して以下のプログラムを実行するだけで画像の色を反転させる事ができます。
import cv2
img = cv2.imread('C:/Temp/towa.jpg') #これでimgに画像データが入る
dst = cv2.bitwise_not(img) #画像の色を反転させる
cv2.imwrite('C:/Temp/reverse.jpg',dst) #画像を保存
たったこれだけです。簡単すぎますよね。cv2.bitwise_notに元画像データを入れるだけで戻り値として反転したデータが帰ってきます。
ちなみに,出力画像はこんな感じになります。
ホラー画像のサムネとかに使えそうですね。こんな感じで元画像の色情報を逆転させた後の画像を簡単に取得できます。
cv2.bitwise_notによる内部処理を解説
実際にcv2.bitwise_notの処理を解説していこうと思います。今回の画像は500×500ピクセルの画像です。
こんな形で画像データは構築されています。そこで,サンプルにど真ん中(250,250)座標の画像データを反転前後で見てみたいと思います。
import cv2
img = cv2.imread('C:/Temp/towa.jpg') #これでimgにグレースケール画像が入
print("反転前")
print(img[250][250])
dst = cv2.bitwise_not(img) #画像の色を反転させる
cv2.imwrite('C:/Temp/reverse.jpg',dst) #画像を保存
print("反転後")
print(dst[250][250])
このソースコードを取得すると,print関数で(250,250)の座標データがコマンドラインに出て来ます。その結果を下に示します。
こちらが反転前後の色画像データです。見て頂けると分かると思いますが,これは1ピクセルを構成するRGB(赤緑青)の値になります。つまりこの画像の反転前は真ん中のピクセルは(240,249,255)で表現できる色でした。一方で反転した場合は(15,6,0)です。
RGBの場合は赤緑青の色の強さをそれぞれ 0~255 で表現します。
つまりcv2.bitwise_not はRGBの値を255をベースに反転させる処理なんです。
ただ,RGBそれぞれの強さを反転させるので結構考えていた処理と異なる結果になる事が多いです。
こういった特徴を踏まえながら活用していってください。