Pythonで画像変換(アフィン変換)
物体認識した対象が画像の中央に位置するように画像を変換(XYシフト)する、というプログラムが作りたい。今日のところは、シフト量が与えられているものとして、アフィン変換の部分だけを作った。
結果
400 x 200 pixの画像に x= 20, y= 50 シフト量を与えた。右が元画像、左がアフィン変換後の画像。
プログラム
Pyhton3.8.1
import sys import cv2 import numpy as np #アフィン変換(XYシフト)クラス class AffineShift(): #入力画像をコンストラクタで受ける def __init__(self, img): self.img = img self.x = img.shape[0] #imgの横サイズ self.y = img.shape[1] #imgの縦サイズ print("Start") #アフィン変換メソッド def shift(self, row, col): #シフト量をrow, colで受ける M = np.float32([[1,0,row],[0,1,col]]) #変換行列の作成(np.float32必須) dst = cv2.warpAffine(self.img, M, (self.y, self.x)) #変換してdstに画像を入れる cv2.imshow('Original image', self.img) cv2.imshow('Converted', dst) cv2.waitKey(0) cv2.destroyAllWindows() #メインメソッド def main(): dx = 20 #横方向のシフト量 dy = 50 #縦方向のシフト量 img = cv2.imread(sys.argv[1], cv2.IMREAD_COLOR) affineShift = AffineShift(img) #インスタンス作成 affineShift.shift(dx, dy) #shiftメソッド実行 if __name__ == '__main__': main()
[11_AffineShift_001.py]