OpenCV(Open Source Computer Vision Library)はインテルが開発したオープンソースのコンピュータ向け画像ライブラリです.

目次

  1. opencv-python
    1. インストールと使用
    2. 画像ファイルの読み書き
    3. 画像サイズの取得
    4. 色の変換
    5. 画像の合成
    6. 画像の結合
    7. 回転
  2. デジタル検版
    1. スクリプト
    2. 使用例

opencv-python

PythonでOpenCVを扱うにはopencv-pythonを使います.

次の環境での例です.

  • macOS 11.2
  • python 3.8
  • opencv-python 4.5.1

インストールと使用

インストールは

pip3 install opencv-python

で行えます.

ライブラリのインポートは

import cv2

です.

画像ファイルの読み書き

画像ファイルの読み込みは,

img = cv2.imread('入力ファイル名')

です.

imgに画像が読み込まれているとすれば,

cv2.imwrite('出力ファイル名', img)

で書き出すことができます.

画像サイズの取得

画像サイズはshapeに格納されています.

img.shape[0:2]
# (width, height)が返る.

色の変換

色の変換にはcvtColorメソッドを使います.

例えば,グレースケールへの変換にはCOLOR_BGR2GRAYを指定し,

cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

とします.

RGBをBGRにするにはCOLOR_RGB2BGRです.

画像の合成

次の形で画像を合成します.

cv2.addWeighted(file1, alpha, file2, beta, gamma)

file1alpha倍,file2beta倍して,スカラー値でgammaを加えた合成になります.

画像の結合

5画像連結する例

import cv2
import numpy as np

im1 = cv2.imread('image_1.jpg')
im2 = cv2.imread('image_2.jpg')
im3 = cv2.imread('image_3.jpg')
im4 = cv2.imread('image_4.jpg')
im5 = cv2.imread('image_5.jpg')

im_h = cv2.hconcat([im1, im2, im3, im4, im5])
cv2.imwrite('output.jpg', im_h)

回転

rotateメソッドでパラメータを設定します.

  • ROTATE_90_CLOCKWISE
  • ROTATE_90_COUNTERCLOCKWISE
  • ROTATE_180

例えば,時計回りに90度回転させるには,

img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)

です.

デジタル検版

スクリプト

スクリプトではsrc.jpgtar.jpgの2枚のjpg画像を読み込み,差分を検出してdiff.jpgを出力しています.
この例では過剰反応を防ぐために,cv2.thresholdの引数で差分ありとみなすための閾値をthresh=0[より大きい]ではなくthresh=2としました.

import cv2

# 画像読み込み
src = cv2.imread('src.jpg')
tgt = cv2.imread('tgt.jpg')
result = cv2.addWeighted(src, 0.5, tgt, 0.5, 0)

# 画像をグレースケールに変換し,差分を取得
src = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
tgt = cv2.cvtColor(tgt, cv2.COLOR_BGR2GRAY)
img = cv2.absdiff(src, tgt)

# 差分箇所の囲みを作成
ret, img = cv2.threshold(img, thresh=2, maxval=255, type=cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(img, mode=cv2.RETR_TREE, method=cv2.CHAIN_APPROX_SIMPLE)

# 出力画像を作成
result = cv2.drawContours(result, contours, contourIdx=-1, color=(0, 0, 255), thickness=2)
cv2.imwrite('diff.jpg', result)

使用例

スクリプトを適用し,2枚の画像から差分を検出した例です.
画像はいらすとや様からお借りしました.

元の画像ファイル(src.jpg)

白色の枠を誤って電柱の上に置いてしまった画像ファイル(tgt.jpg)

この2枚を比較すると,差分が赤色で表示されます.

画像の差分(diff.jpg)