リサイズ
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