not good but great

プログラミング、アート、映画・本の感想について書きます。

Python2.7,OpenCVで画像を回転

機械学習を用いて顔認識したいとき、顔の画像データが大量に必要になります。しかし手元に少量しかない時、データを増やすことをやるそうです(Data Augmentation)。その手法の一つに画像を微妙に回転させるやり方があります。OpenCVを使って画像を回転させてみます。

warpAffineを使う

def getRotateImage(img, angle):
    original_width, original_height = img.shape[:2]
    size = original_width
    matrix = cv2.getRotationMatrix2D((size / 2, size / 2), angle, 1.0)
    rotated_img = cv2.warpAffine(img, matrix, (size, size))
    
    return rotated_img

warpAffineを使ってアフィン変換を使えばできます。

回転させて画像を表示

for delta_angle in range(-15, 15, 5):
    rotated_img = getRotateImage(croppedFace, delta_angle)

    plt.imshow(cv2.cvtColor(rotated_img, cv2.COLOR_BGR2RGB))
    plt.show()

croppedFaceはcv2.imreadした配列です。

結果

Kobito.po2imP.png

回転していることがわかりやすいように、range(-150, 150, 50)でやってみます。回転できました。

データ拡張では回転量は微量で良いのではないかという予想してます(まだ実践していないのでわからない)。