cv2.getRotationMatrix2D()
画像の回転行列は一般的に次のとおりです。
しかし、この単純な行列は原点で変換されます。任意の位置で回転および変換できるようにするために、opencvは別の方法を使用します:
この行列を作成するために、
opencvは関数cv2.getRotationMatrix2D()を提供します。この関数には、次の例のように、回転の中心、回転角、回転した画像のスケールの3つのパラメーターが必要です。
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('flower.jpg')
rows,cols = img.shape[:2]
#第一个参数旋转中心,第二个参数旋转角度,第三个参数:缩放比例
M = cv2.getRotationMatrix2D((cols/2,rows/2),45,1)
#第三个参数:变换后的图像大小
res = cv2.warpAffine(img,M,(rows,cols))
plt.subplot(121)
plt.imshow(img)
plt.subplot(122)
plt.imshow(res)
cv2.warpAffine()
cv2.warpAffine(img、M、(rows、cols)、flags = cv2.INTER_、borderMode = cv2.BORDER_REFLECT、borderValue =(255,255,255))
src-入力画像。
M変換行列。
dsize-出力画像のサイズ。
フラグ-補間メソッドの組み合わせ(int型!)
borderMode-境界ピクセルモード(int型!)
borderValue-(強調!)境界パディング値。デフォルトでは0です。
上記のパラメータの中で:Mは、一般に平行移動または回転の関係を反映するアフィン変換行列であり、InputArrayタイプの2×3変換行列です。
Flagsは補間方法を表し、デフォルトはflags = cv2.INTER_LINEARであり、線形補間を表します。さらに、cv2.INTER_NEAREST(最近隣内挿)cv2.INTER_AREA(領域内挿)cv2.INTER_CUBIC(3次スプライン補間)cv2.INTER_LANCZOS4 (Lanczos補間)
毎日のアフィン変換では、cv2.warpAffine(img、M、(rows、cols))などの最初の3つのパラメーターのみを設定すると、基本的なアフィン変換効果を実現できますが、「黒い境界線」の現象が発生する可能性があります。図に示されている:
これにより、後続の処理で多くの問題が発生することがよくあります.6番目のパラメータでは塗りつぶしの色を選択でき、デフォルトは黒です。PythonでwarpAffineを設定するためのパラメーターは、C ++のパラメーターとは異なります。パラメーターの名前は次のように指定する必要があります。
c ++中:warpAffine(src、img、M、Size(a、b)、1,0、Scalar(255,255,255));
Pythonの場合:
cv2.warpAffine(img、M、(rows、cols)、flags = cv2.INTER_、borderMode = cv2.BORDER_REFLECT、borderValue =(255,255,255))
Pythonの利点の1つは、それらを順番に設定する必要がなく、上の画像の境界領域を白で塗りつぶすなど、直接設定したパラメーターを指定するだけです:
cv2.warpAffine(img、M、(lengh、lengh)、borderValue =(255,255,255))
から:
https://blog.csdn.net/weixin_41010198/article/details/88424163