Python独習!

習得したPython知識をペイフォワード

Pythonで画像変換(アフィン変換)

物体認識した対象が画像の中央に位置するように画像を変換(XYシフト)する、というプログラムが作りたい。今日のところは、シフト量が与えられているものとして、アフィン変換の部分だけを作った。

結果

400 x 200 pixの画像に x= 20, y= 50 シフト量を与えた。右が元画像、左がアフィン変換後の画像。
f:id:greenhornprofessional:20200204235050p:plain

プログラム

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]

/* -----codeの行番号----- */