PythonとOpenCVで画像の算術演算を行う方法|加算・減算のコード例付き解説
はじめに
このチュートリアルでは、OpenCVを使った画像の算術演算について学びます。画像に対しては、加算・減算・ビット演算など、さまざまな操作を適用することが可能です。ここでは、実際のコード例を交えながら、画像への演算処理の方法をわかりやすく解説していきます。
OpenCVのインストール
画像に対して演算を行うには、OpenCVモジュールが必要です。まずはターミナルまたはコマンドラインで、以下のコマンドを実行してOpenCVをインストールしましょう。
pip install opencv-python==4.1.1.26
上記のコマンドを実行すると、次のような成功メッセージが表示されます。
Collecting opencv-python==4.1.1.26 Downloading https://files.pythonhosted.org/packages/1f/51/e0b9cef23098bc31c77b0e0 6221dd8d05119b9782d4c2b1d1482e22b5f5e/opencv_python-4.1.1.26-cp37-cp37m-win_amd64.w hl (39.0MB) Requirement already satisfied: numpy>=1.14.5 in c:\users\hafeezulkareem\anaconda3\l ib\site-packages (from opencv-python==4.1.1.26) (1.16.2) Installing collected packages: opencv-python Successfully installed opencv-python-4.1.1.26
※ここではバージョン4.1.1.26を指定していますが、特別な理由がない限り最新版をインストールしても問題ありません。その場合は「pip install opencv-python」だけでOKです。
画像の加算(ブレンド)
2つの画像を重ね合わせる(加算する)には、cv2.addWeighted()関数を使用します。この関数は合計5つの引数を受け取ります。1つ目と2つ目が対象となる2枚の画像、3つ目と4つ目がそれぞれの画像の重み(ウェイト)、そして5つ目が最終的な画像の明るさを調整するための値(ガンマ値)です。
今回使用するサンプル画像は以下の2枚です。
image_one(1枚目の画像)

image_two(2枚目の画像)

それでは、この2枚の画像を1枚に合成してみましょう。
コード例
# cv2モジュールをインポート
import cv2
# 画像を読み込んで変数に格納
image_one = cv2.imread('_1.jpg')
image_two = cv2.imread('_2.jpg')
# 2つの画像を加算(それぞれ50%ずつブレンド)
result_image = cv2.addWeighted(image_one, 0.5, image_two, 0.5, 0)
# 最終的な画像を表示
cv2.imshow('Final Image', result_image)
# メモリを解放
if cv2.waitKey(0) & 0xff == 27:
cv2.destroyAllWindows()
出力結果
最終画像

両方の画像の重みを0.5に設定することで、2枚の画像が半々でブレンドされた結果が得られます。重みの合計は1になるように調整するのが一般的で、たとえば一方を強調したい場合は0.7と0.3のように変更できます。
画像の減算
2つの画像の減算を行うには、cv2.subtract(image_one, image_two)メソッドを使用します。こちらも加算のときと同じ2枚の画像を使って試してみましょう。
コード例
# cv2モジュールをインポート
import cv2
# 画像を読み込んで変数に格納
image_one = cv2.imread('_1.jpg')
image_two = cv2.imread('_2.jpg')
# 2つの画像を減算
result_image = cv2.subtract(image_one, image_two)
# 最終的な画像を表示
cv2.imshow('Final Image', result_image)
# メモリを解放
if cv2.waitKey(0) & 0xff == 27:
cv2.destroyAllWindows()
出力結果
最終画像

減算では、1枚目の画像から2枚目の画像のピクセル値が差し引かれます。計算結果が負になった場合は0にクリップされるため、該当部分は黒く表示されます。この性質を利用すると、2枚の画像の差分検出などにも応用できます。
まとめ
このチュートリアルでは、OpenCVを使った画像の算術演算として、cv2.addWeighted()による加算(ブレンド)と、cv2.subtract()による減算の方法を紹介しました。これらの基本的な演算は、画像の合成、差分検出、背景除去など、さまざまな画像処理タスクの土台となる重要なテクニックです。ぜひ自分の画像でも試してみてください。
本チュートリアルについてご不明な点がある場合は、コメント欄でお気軽にお尋ねください。
-
PythonとOpenCVを使って動画を逆再生(リバース再生)する方法
OpenCVは「Open Source Computer Vision(オープンソース・コンピュータビジョン)」の略称です。この強力なライブラリを活用することで、画像や動画に対してさまざまな操作を実行できます。OpenCVの主な応用分野顔認識システムモーショントラッキング(動体追跡)人工ニューラルネットワーク深層ニューラルネットワーク動画ストリーミング などOpenCVのインストール方法Windows環境では、以下のコマンドでインストールできます。pip install opencv-pythonLinux環境の場合は、次のコマンドを使用します。sudo apt-get install pyt
-
【Python×OpenCV】画像の収縮(エロージョン)と膨張(ダイレーション)の基本を解説
本記事では、PythonのOpenCVモジュールを使って、エロージョン(収縮)やダイレーション(膨張)といったモルフォロジー演算(形態学的処理)を実行する方法を解説します。 OpenCVはコンピュータビジョン向けに設計されたオープンソースのライブラリで、もともとはIntelによって開発されました。BSDライセンスのもとで誰でも無料で利用できます。 OpenCVの機能を使うには、まずpipでインストールしておきましょう。 sudo pip3 install opencv-python エロージョン(収縮)とは?仕組みを解説 エロージョンは、前景オブジェクトの境界を削り取っていく処理です。画像内の