hiyoko-programingの日記

プログラミングを勉強したてのひよっ子。   エンジニア目指して勉強中。

画像を回転させる

◉回転させる理由

画像検出を行う際、特定箇所を見つけるためには、

前もって様々なパターンを知っておく必要が出てくる。

パターンの中には上下が逆になっていたり、少し斜めになっていたりする状態でも

検出できる必要がある。

そのような、バリエーションを作るときに利用される。

 

◉回転させる方法

cv2.getRotationMatrix2D(回転の中心座標, 回転角度, 倍率)

 ⚫︎回転の中心座標:XとYの座標で指定(px)

 ⚫︎回転角度:反時計回りに回転させる角度(単位は度)

 ⚫︎倍率:回転と一緒に画像の倍率を変化させる

 

cv2.warpAffine(画像, 変換させる情報, 変換後の画像サイズ)

 ⚫︎画像:回転させたい画像

 ⚫︎変換させる情報:(今回は)回転の情報

 ⚫︎変換後の画像サイズ:縦と横のサイズを指定(px)

 

<画像を回転させるPythonコード例>

import sys

import cv2

if len(sys.argv)<2:

    print('表示したいファイル名を指定してください。')

    sys.exit()

file = sys.argv[1]

try:

    img = cv2.imread( ' file ' ) 

    if img is None:

         raise ValueError('ファイルが見つかりません')

    img_height = img.shape[0]   #元画像の縦サイズ

    img_width = img.shape[1]   #元画像の横サイズ

    img_center = (int(img_width/2),int(img_height/2)) #中心点を計算

    img_rotate = cv2.getRotationMatrix2D(img_center, 20.0, 1.0)

 effect = cv2.warpAffine(img, (img_rotate,(im_width, img_height))

    cv2.imshow(file, effect)

    cv2.waitKey(0)

    cv2.destroyAllWindows()

except ValueError as e:

    print(e)

except:

    import traceback

    traceback.print_exc()

 

※回転の中心座標は画像の中心となっているコード。

※回転角度は20度、変換後の画像サイズは1.0で等倍に指定しているコード。