Python OpenCV
目次
画像表示
ライブラリ読込
import cv2
画像読込
try:
cv2.namedWindow(‘imageWindow’)
img = cv2.imread(‘images/test.jpg’)
if img is None:
raise ValueError(‘ファイル無し’)
except ValueError as e:
print(e)
except:
import traceback
traceback.print_exc()
画像表示
cv2.imshow(‘imageWindow’,img)
wait = True
while wait:
wait = cv2.waitKey()==’q113′
起動時に受け取ったファイルパスの画像表示
起動例 python test.py pic/test.jpg
try:
if len(sys.argv) < 2:
raise ValueError(‘No Parameter’)
file = sys.argv[1]
sys.argv[0]:〜/test.py
cv2.namedWindow(‘imageWindow’)
img = cv2.imread(file)
cv2.imshow(file, img)
except 〜
円を描く
center = (50, 50)
radius = 30 # 半径
color = (0, 200, 255)
cv2.circle(img, center, radius, color, thickness=None, lineType=None, shift=None)
cv2.imshow(‘imageWindow’,img)
正方形を描く
cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)
cv2.imshow(‘imageWindow’,img)
文字を描く
cv2.putText(img, text=’文字’, org=(20, 50), fontFace=cv2.FONT_HERSHEY_COMPLEX, fontScale=1.1, color, thickness=None, lineType=None, bottomLeftOrigin=None)
cv2.imshow(‘imageWindow’,img)
縮小
height = int(img.shape[0])
width = int(img.shape[1])
RESEZE_SCALE = 0.5
dsize = (int(width * RESEZE_SCALE), int(height * RESEZE_SCALE))
effect = cv2.resize(img, dsize)
cv2.imshow(‘imageWindow’, effect)
指定の横幅まで拡大
height = int(img.shape[0])
width = int(img.shape[1])
RESEZE_WIDTH = 640 #px
dsize = (RESEZE_WIDTH, int( (RESEZE_WIDTH/width) * height) )
effect = cv2.resize(img, dsize)
cv2.imshow(‘imageWindow’, effect)
回転
height = int(img.shape[0])
width = int(img.shape[1])
center = ( int(width/2), int(height/2) )
rotate = cv2.getRotationMatrix2D(center, angle=20.0, scale=1.0)
effect = cv2.warpAffine(img, rotate, (width, height))
cv2.imshow(‘imageWindow’, effect)
色反転
effect = cv2.bitwise_not(img)
cv2.imshow(‘imageWindow’, effect)
モザイク
height = int(img.shape[0])
width = int(img.shape[1])
MOSAIC_SCALE = 0.1 #縮小率
dsize = ( round(width*MOSAIC_SCALE), round(height*MOSAIC_SCALE) )
effect = cv2.resize(img, dsize) #縮小
effect = cv2.resize(effect, (width, height), interpolation=cv2.INTER_NEAREST) #拡大
cv2.imshow(‘imageWindow’, effect)
グレースケール
effect = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
cv2.imshow(‘imageWindow’, effect)
2値化
effect = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
retValue, effect = cv2.threshold(effect, thresh=100, maxval=200, type=cv2.THRESH_BINARY, dst=None)
cv2.imshow(‘imageWindow’, effect)
輪郭抽出(ラプラシアン)
effect = cv2.Laplacian(img, ddepth=-1)
cv2.imshow(‘imageWindow’, effect)
輪郭抽出(ソーベル)
effect = cv2.Sobel(img, ddepth=-1, dx=0, dy=1)
cv2.imshow(‘imageWindow’, effect)
輪郭抽出(キャニー)
effect = cv2.Canny(img, threshold1=10.0, threshold2=200.0, edges=None, apertureSize=None, L2gradient=None)
cv2.imshow(‘imageWindow’, effect)
画像認証
物体検出
import cv2
import sys
import os
画像サイズ調整
RESIZE_WIDTH = 800
if width < RESIZE_WIDTH:
height = int(img.shape[0])
width = int(img.shape[1])
dsize = (RESIZE_WIDTH, int((RESIZE_WIDTH/width)*height))
resize = cv2.resize(img, dsize)
else:
resize = img
グレースケール
effected = cv2.cvtColor(resize, cv2.COLOR_RGB2GRAY)
評価器
CASCADE_FILE = ‘AI/haarcascade_frontalface_alt.xml’
ファイル存在チェック
assert os.path.isfile(CASCADE_FILE)
検出器
haar_cascade = cv2.CascadeClassifier(CASCADE_FILE)
検出
scaleFactor:入力画像の縮小率
minNeighbors:物体候補となる矩形は、最低でもこの数だけの近傍矩形を含む必要がある
minSize:物体が取り得る最小サイズ。これよりも小さい物体は無視される
detected = haar_cascade.detectMultiScale(effected, scaleFactor=1.1, minNeighbors=2, minSize=(30, 30))
if len(detected)>0:
検出箇所を四角で囲む
for rect in detected:
cv2.rectangle(effected, pt1=tuple(rect[0:2]), pt2=tuple(rect[0:2]+rect[2:4]), color=(0, 0, 255), thickness=2)
else:
cv2.putText(effected, text=’No Match Found’, org=(20, 50), fontFace=cv2.FONT_HERSHEY_COMPLEX, fontScale=1.0, color=(0, 0, 255), thickness=2)
cv2.imshow(file, effected)
テンプレートマッチング
img = cv2.imread(‘images/test1.jpg’)
img_template = cv2.imread(‘images/test2.jpg’)
テンプレートマッチング
result_match = cv2.matchTemplate(img, img_template, method=cv2.TM_CCOEFF_NORMED, result=None, mask=None)
cv2.imshow(‘result’, result_match)
マッチング位置取得
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result_match)
top_left = max_loc
bottom_light = (top_left[0] + img_template.shape[1], top_left[1] + img_template.shape[0])
マッチング結果描画
cv2.rectangle(img, pt1=top_left, pt2=bottom_light, color=(0, 0, 255), thickness=2)
cv2.imshow(file, effected)