python-opencv基礎入門(一)

4762 ワード

最近opencvを勉強したいので、まず基礎的な操作をまとめてみましょう.貼ってシェア!
一、画像の読み書き
img1 = cv2.imread('01.jpg')
cv2.imshow('', img1)
cv2.imwrite('res.jpg', img1)
cv2.waitKey()

二、カラー画像を表示する
img1 = cv2.imread('01.jpg')
cv2.namedWindow('my_win', cv2.WINDOW_AUTOSIZE)
cv2.imshow('my_win', img1)
cv2.waitKey()
print(img1.shape)  #         

三、白黒画像を表示する
img2 = cv2.imread('res.jpg', 0)
cv2.namedWindow('my_win1', cv2.WINDOW_NORMAL)
cv2.imshow('my_win1', img2)
cv2.waitKey()
print(img2.shape)
print(img2.size)  #        
print(img2.dtype)  #         

四、空の画像を生成する
img3 = np.zeros(img2.shape,np.uint8)
img4 = np.zeros((300, 500, 3), np.uint8)
cv2.namedWindow('test_win1', cv2.WINDOW_AUTOSIZE)
cv2.namedWindow('test_win2', cv2.WINDOW_AUTOSIZE)
cv2.imshow('test_win1', img3)
cv2.imshow('test_win2', img4)
cv2.waitKey()

五、座標で画像にアクセスする
img1 = cv2.imread('res.jpg')
temp = img1[50, 100]
print(temp)
cv2.namedWindow('my_win1', cv2.WINDOW_AUTOSIZE)
print(type(img1[50:100, 100:300]))
img1[50:100, 100:300] = [0, 0, 255]  # Blue, Green, Red = [0, 0, 255]
cv2.imshow('my_win1', img1)
cv2.waitKey()
img2 = cv2.imread('res.jpg')
cv2.namedWindow('my_win2', cv2.WINDOW_AUTOSIZE)
img2[100:200, 300:500, 0] = 100
img2[100:200, 300:500, 1] = 100
img2[100:200, 300:500, 2] = 100
cv2.imshow('my_win2', img2)
cv2.waitKey()
img3 = cv2.imread('res.jpg')
img3[50:100, 100:300] = 255  # Python   Blue, Green, Red = [255, 255, 255]
cv2.namedWindow('my_win3', cv2.WINDOW_AUTOSIZE)
cv2.imshow('my_win3', img3)
cv2.waitKey()

六、カラー画像チャネルの分離と合併
img1 = cv2.imread('res.jpg')
cv2.imshow('ori', img1)
blue, green, red = cv2.split(img1)
cv2.imshow('blue', blue)
cv2.imshow('green', green)
cv2.imshow('red', red)
img2 = cv2.merge([blue, green, red])
cv2.imshow('merge', img2)
cv2.waitKey()

七、画像にテキストを追加して回転する
#     :putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)
img1 = cv2.imread('res.jpg')
txt = 'call me iron man'
position = (250, 80)
cv2.putText(img1, text=txt, org=position, fontFace=cv2.FONT_HERSHEY_SIMPLEX, fontScale=1, color=(0, 255, 0),
            thickness=2)
cv2.namedWindow('my_win1', cv2.WINDOW_AUTOSIZE)
h, w = img1.shape[:2]
center = (h/2, w/2)
matrix = cv2.getRotationMatrix2D(center, 45, 1)  #             
rotated = cv2.warpAffine(img1, matrix, (w, h))
cv2.imshow('my_win1', rotated)
cv2.waitKey()

八、画像の大きさを変える
img1= cv2.imread('res.jpg')
img2 = cv2.resize(img1, (222, 333))
cv2.imshow('', img2)
cv2.waitKey()

九、画像の平行移動
img1= cv2.imread('res.jpg')
h, w = img1.shape[:2]
p = np.float32([[1, 0, 50], [0, 1, 100]])
moved_img = cv2.warpAffine(img1, p, (w, h))
cv2.namedWindow('my_win', cv2.WINDOW_AUTOSIZE)
cv2.imshow('my_win', moved_img)
cv2.waitKey(0)

十、シミュレーション変換
img1 = cv2.imread('res.jpg')
h, w = img1.shape[:2]
p1 = np.float32([[0, 0], [50, 50], [25, 200]])  #        
p2 = np.float32([[50, 20], [80, 80], [60, 250]])
M = cv2.getAffineTransform(p1, p2)
affined_img = cv2.warpAffine(img1, M, (w, h))
my_win = cv2.namedWindow('my_win', cv2.WINDOW_AUTOSIZE)
cv2.imshow('my_win', affined_img)
cv2.waitKey(0)

十一、画像に外枠を追加する
img1 = cv2.imread('res.jpg')

replicate = cv2.copyMakeBorder(img1, 10, 10, 10, 10, cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img1, 10, 10, 10, 10, cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img1, 10, 10, 10, 10, cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img1, 50, 50, 30, 30, cv2.BORDER_WRAP)
cv2.imshow('replicate', replicate)
cv2.imshow('reflect', reflect)
cv2.imshow('reflect101', reflect101)
cv2.imshow('wrap', wrap)
constant = cv2.copyMakeBorder(img1, 10, 10, 10, 10, cv2.BORDER_CONSTANT, value=(0, 255, 0))
cv2.imshow('constant', constant)
cv2.waitKey()

十二、透視変換
import matplotlib.pyplot as plt
img = cv2.imread('res.jpg')
rows,cols,ch = img.shape

pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])

M = cv2.getPerspectiveTransform(pts1,pts2)

dst = cv2.warpPerspective(img,M,(cols, rows))

plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()