LoginSignup
2
2

More than 3 years have passed since last update.

OpenCVで画像を回転+保存

Last updated at Posted at 2021-03-05

概要

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がエラーした時のものらしいです(自分はあんまりわかってません).

出力される画像

入力した画像はこちらです.
kakuseiki_businesswoman_smile.jpg
出力された画像はこちらです.
kakuseiki_businesswoman_smile_90.jpg  kakuseiki_businesswoman_smile_180.jpg  kakuseiki_businesswoman_smile_270.jpg

画像が正方形ではない場合は,黒い部分が発生してしまうので,縦横の大きさが等しいものにしか使えないです.

おまけ

読み込ませる画像のファイル名に全角の文字が含まれているとエラーが出ます.
(OpenCVは全角文字を含むファイルは読み込めないんですかね?)

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2