OpenCV で画像を回転
このチュートリアルでは、Python で OpenCV の rotate()
および warpAffine()
関数を使用して画像を回転させる方法について説明します。
Python で OpenCV の rotate()
関数を使用して画像を回転させる
OpenCV の rotate()
関数を使用して画像を回転させることができます。rotate()
関数の最初の引数は、回転させたい画像です。2 番目の引数は、画像が回転する量と方向を指定します。
rotate()
関数を使用して画像を回転させる方法は 3つだけです。2 番目の引数を cv2.ROTATE_90_CLOKWISE
に設定して、画像を時計回りに 90 度回転させることができます。
cv2.ROTATE_180
を使用して、画像を 180 度回転したり、反転したりできます。cv2.ROTATE_90_COUNTERCLOCKWISE
を使用して、画像を反時計回りに 90 度または時計回りに 270 度回転させることができます。これらは、rotate()
関数を使用して画像を回転させるための唯一の 3つの角度です。
たとえば、imread()
関数を使用して画像を読み取り、時計回りに 90 度回転してから、imshow()
関数を使用して元の画像と一緒に表示してみましょう。以下のコードを参照してください。
import cv2
import numpy as np
image = cv2.imread("cat.jpg")
image_norm = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)
cv2.imshow("original Image", image)
cv2.imshow("Rotated Image", image_norm)
cv2.waitKey(0)
cv2.destroyAllWindows()
出力:
rotate()
を使用すると、画像を 3つの角度でしか回転できませんが、画像をすべての角度で回転させたい場合は、以下で説明する warpAffine()
関数を使用できます。
Python で OpenCV の warpAffine()
関数を使用して画像を回転させる
OpenCV の warpAffine()
関数を使用して、画像を任意の角度で回転させることができます。warpAffine()
関数は、行列を別の行列に変換します。
画像を回転させるには、OpenCV の getRotationMatrix2D()
関数を使用してその回転行列を見つける必要があります。
getRotationMatrix2D()
の最初の引数は、画像を回転させたい画像の中心です。2 番目の引数は回転角で、3 番目の引数は画像の縮尺です。
縮尺が 1 未満の場合、画像は元の画像よりもサイズが小さくなります。つまり、ズームアウトされます。スケールが正の数の場合、画像はスケールまたはズームインされます。縮尺が 1 の場合、画像は縮尺されません。
warpAffine()
関数の最初の引数は、回転させたい画像です。2 番目の引数は回転行列で、3 番目の引数は出力画像のサイズです。
たとえば、上の画像を中心を中心に 45 度回転させてみましょう。以下のコードを参照してください。
import cv2
import numpy as np
image = cv2.imread("cat.jpg")
(h, w) = image.shape[:2]
center = (w / 2, h / 2)
angle = 30
scale = 1
M = cv2.getRotationMatrix2D(center, angle, scale)
rotated = cv2.warpAffine(image, M, (w, h))
cv2.imshow("original Image", image)
cv2.imshow("Rotated Image", rotated)
cv2.waitKey(0)
cv2.destroyAllWindows()
出力:
上記のコードでは、shape メソッドを使用して指定された画像の長さと幅を見つけ、次に長さと幅の半分を使用して画像の中心を計算しました。中心、角度、スケールの値を変更して、目的の結果を得ることができます。
borderMode
引数を使用して、出力画像の境界モードを設定することもできます。デフォルトでは、境界線モードは cv2.BORDER_CONSTANT
に設定されており、ご覧のとおり、出力画像の隅に境界線はありません。
ボーダーモードを cv2.BORDER_TRANSPARENT
に設定できます。出力画像の境界線は元の画像と同じになるか、コーナーは同じままになります。
ボーダーモードを cv2.BORDER_REPLICATE
に設定できます。出力画像の境界線またはコーナーは、近くのピクセルを使用して描画されます。
ボーダーモードの詳細については、このリンクをクリックしてください。
関連記事 - Python OpenCV
- OpenCV ArUco マーカー
- OpenCV しきい値
- OpenCV でのイメージ マスキング
- OpenCV パッケージ構成
- OpenCV を使用してイメージで Bitwise_AND を利用する
- Python で OpenCV を使用した SIFT