さっきスマホで撮った写真なんだけど、全部が左に90度回転していた…。
OpenCVで画像を回転させて元に戻すことはできないの?
なるほど…。
では今回は、「OpenCVで画像を回転させる方法」を
できるだけわかりやすく解説いたします。
また、「フォルダ内の全ての画像を回転させる方法」
も紹介いたしますので、最後まで読んでいってください。
OpenCVで画像を回転させる方法
「rotate」を使います。まずは全コードと実行結果をお見せします。
解説は後ほど行います。
全コード
import cv2
input_img = cv2.imread('C:/Utatane/input_img.jpg')
output_img = cv2.rotate(input_img, cv2.ROTATE_90_CLOCKWISE)
cv2.imwrite('C:/Utatane/output_img.jpg', output_img)
output_img = cv2.rotate(input_img, cv2.ROTATE_90_CLOCKWISE)
実行結果
事前準備
- OpenCVのインストール
画像を加工したり編集したりするには「OpenCV」のインストールが必要です。
OpenCVを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install opencv-python
※OpenCVを使用したことがある場合は、このインストール作業は不要です。
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
インポートや画像の読み込み・保存方法の解説は、下記記事をご参考ください。
画像を回転
output_img = cv2.rotate(input_img, cv2.ROTATE_90_CLOCKWISE)
上記一文にて、画像を右(時計回り)に90度回転させることができます。
まず新しい名前の変数を書いたら、「=(イコール)」を書きます。
新しい変数を作成する場合に注意すべきところがあります。
下記記事で解説しておりますので、事前にご覧ください。
イコールの後ろに「cv2.rotate()」を書きます。
()内に「読み込みした画像が入った変数」と「cv2.ROTATE_90_CLOCKWISE」を書いたら完了です。
今回は右に90度回転させましたが、方向や角度を指定することができます。
次項をご覧ください。
回転させる方向・角度
左に90度回転
output_img = cv2.rotate(input_img, cv2.ROTATE_90_COUNTERCLOCKWISE)
()内の第二引数に「cv2.ROTATE_90_COUNTERCLOCKWISE」を書きます。
これで画像を左(反時計回り)に90度回転させることができます。
180度回転
output_img = cv2.rotate(input_img, cv2.ROTATE_180)
()内の第二引数に「cv2.ROTATE_180」を記述することで、画像を180度回転させることができます。
任意の角度に回転
下記コードでは、画像を45度回転させることができます。
(h, w) = input_img.shape[:2]
center = (w / 2, h / 2)
angle = 45
scale = 1
kaiten = cv2.getRotationMatrix2D(center, angle, scale)
output_img = cv2.warpAffine(input_img, kaiten, (w, h))
上図のように黒い部分が出てしまうことを頭に入れておいてください。
また、この方法で回転させると、左回転(反時計回り)になります。
右に45度回転させたい場合は、「angle = -45」と記述すればOKです。
全ての画像を回転させる方法
冒頭の会話のように、フォルダにある全ての画像を回転させることもできます。
下記コードはfor文を使ってフォルダ内にある全ての画像を回転させた例です。
import cv2
import os
os.makedirs('C:/Utatane/output', exist_ok=True)
for filename in os.listdir('C:/Utatane'):
if filename.endswith('.jpg') :
input_img = cv2.imread(os.path.join('C:/Utatane', filename))
output_img = cv2.rotate(input_img, cv2.ROTATE_90_CLOCKWISE)
cv2.imwrite(os.path.join('C:/Utatane/output', filename), output_img)
ざっくりと解説いたします。
<コード4行目>
出力するフォルダを作成
<コード6行目~最後>
6行目:取り込みフォルダ内のファイルを取り込み
7行目:拡張子が「jpg」なら以下の操作を行う
8行目:取り込みフォルダのパスとファイル名を連結(フルパスに)して取り込み
9行目:画像を回転
10行目:出力フォルダパスとファイル名を連結(フルパスに)して出力
うまく動作しない場合の対処法
画像の読み込みができない
画像ファイルが存在しない場合や、ファイルが破損している場合などは画像の読み込みができません。
画像を読み込み・保存する方法の記事を参考に、再度確認してください。
画像が保存されない
存在しないフォルダを指定した場合、画像は保存されません。
画像を読み込み・保存する方法の記事を参考に、再度確認してください。
エラーが出る
No module named ‘cv2’
これは、OpenCVがインストールできていない場合に出るエラーです。
事前準備の項を参考に、OpenCVのインストールを完了させてください。
OpenCV(4.10.0) ~ img.empty() ~
画像の読み込みが正常に行えていない可能性があります。
画像を読み込み・保存する方法の記事を参考に、画像のパスや形式を確認してください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
OpenCVで画像を回転させる方法を解説いたしました。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!