概要
PythonのOpenCVで画像を回転させ,保存するプログラムを作ってみました.
CNNの学習で,データ拡張に使いました.
開発環境
- Windows10
- Python ver3.7.7
- OpenCV ver3.4.1
コード
import cv2
import os
import glob
def main():
img_files = glob.glob('*.jpg')
for f in img_files:
img = cv2.imread(f)
fname, fext = os.path.splitext(f)
height, width, channels = img.shape
center = (int(width/2), int(height/2))
#回転のテンプレ
#trans = cv2.getRotationMatrix2D(center, angle , scale)
#90度回転
trans1 = cv2.getRotationMatrix2D(center, 90 , 1.0)
#アフィン変換
image_1 = cv2.warpAffine(img, trans1, (width,height))
cv2.imwrite(fname+"_90.jpg", image_1)
#180度回転
trans2 = cv2.getRotationMatrix2D(center, 180 , 1.0)
#アフィン変換
image_2 = cv2.warpAffine(img, trans2, (width,height))
cv2.imwrite(fname+"_180.jpg", image_2)
#270度回転
trans3 = cv2.getRotationMatrix2D(center, 270 , 1.0)
#アフィン変換
image_3 = cv2.warpAffine(img, trans3, (width,height))
cv2.imwrite(fname+"_270.jpg", image_3)
if __name__ == "__main__":
main()
10行目あたり(for f ~のところ)のコードは,同じフォルダー内の画像(このコードではjpg)を全部読み込むものです.
transは画像の回転です.image_は,回転を画像に反映させて,cv2.imwriteで画像の保存をします.
このコードでは,画像を90度,180度,270度回転させてます.
最後の2行のif文は,画像の読み込みでforがエラーした時のものらしいです(自分はあんまりわかってません).
出力される画像
画像が正方形ではない場合は,黒い部分が発生してしまうので,縦横の大きさが等しいものにしか使えないです.
#おまけ
読み込ませる画像のファイル名に全角の文字が含まれているとエラーが出ます.
(OpenCVは全角文字を含むファイルは読み込めないんですかね?)