python

OpenCVでの画像処理入門:その3

リサイズ

import cv2

img = cv2.imread('sample.png')

cv2.imshow('img', img)

cv2.waitKey(0) & 0xFF
cv2.destroyAllWindows()
cv2.waitKey(1) & 0xFF

img.shape # (1060, 2162, 3) etc..

size = (300, 200)
img_resize = cv2.resize(img, size)

img_resize.shape # (200, 300, 3) 順番に注意

cv2.imshow('resize', img_resize)

cv2.waitKey(0) & 0xFF
cv2.destroyAllWindows()
cv2.waitKey(1) & 0xFF

# リサイズ時に画像の圧縮方法に関する違い
img_area =  cv2.resize(img, size, interpolation=cv2.INTER_AREA) # こちらの方がキレイ
img_linear = cv2.resize(img, size, interpolation=cv2.INTER_LINEAR) # デフォルトだとこちら

cv2.imshow('area', img_area)
cv2.imshow('linear', img_linear)

cv2.waitKey(0) & 0xFF
cv2.destroyAllWindows()
cv2.waitKey(1) & 0xFF

色空間・グレースケール

今までのOpenCVでは、RGBを使ってきましたが、色空間の指定の仕方にはHSVやCMYK、YUVなど様々な物があります。
動画解析では、HSVを使用することになりますので、気に留めておいてください。
注意点としては、OpenCVでのHSV表現と本来のHSV表現の取りうる値が違います。
本来のHSVは、H(0~359)S(0-100%)V(0-100%)ですが、OpenCVでは、H(0~179)S(0-255)V(0-255)になります。

グレースケール

RGBという3つの情報を、色の強度という1つの情報にまとめる処理です。
グレースケールにするメリットとしては、演算処理の軽量化が挙げられます。
カラー画像では3つの情報を扱うので、単純計算でグレースケールの3倍処理が重くなってしまうのです。画像解析で色情報が意味を持たない場合には、グレースケールにして情報量を削ってしまった方が効率的です。

import cv2

img = cv2.imread('sample.png')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

img_gray.shape # (1060, 2162)
img_hsv.shape # (1060, 2162, 3)

cv2.imshow('img', img)
cv2.imshow('gray', img_gray)

cv2.waitKey(0) & 0xFF
cv2.destroyAllWindows()
cv2.waitKey(1) & 0xFF

# 簡略化
img_gray2 = cv2.imread('sample.png', 0)

cv2.imshow('gray', img_gray2)
cv2.waitKey(0) & 0xFF
cv2.destroyAllWindows()
cv2.waitKey(1) & 0xFF

img_hsv