OpenCV クイック スタート 10: 画像の基本的な変換

1. スケーリング

1. 関数API

defsize(InputArray src,
OutputArray dst,
サイズ dsize,
double fx = 0,
double fy = 0,
int interpolation = INTER_LINEAR
)

src: 元の画像;
dsize: 拡大縮小された画像サイズ;
dst: ターゲット画像ですが、Python では意味がありません。通常、パラメータを渡さないか、None に設定します。fx
、fy::、および y 方向のスケーリング、
補間: 補間メソッド、
一般的な補間スケーリング アルゴリズム:
ああ

2. コードデモ

import cv2
import numpy as np

dog = cv2.imread('./dog.jpeg')
#若fx.fy也写了优先使用dsize (x,y)
new = cv2.resize(dog,None, fx=0.3, fy=0.3, interpolation=cv2.INTER_AREA)
#shape(y,x,channels)
print(dog.shape)

cv2.imshow('dog', dog)
cv2.imshow('new', new)
cv2.waitKey(0)

2. フリップ

1. 関数API

defsize(InputArray src,flipcode)

src: 入力画像;
フリップコード: フリップタイプ。
ああ

2. コードデモ

import cv2
import numpy as np

dog = cv2.imread('./dog.jpeg')
new = cv2.flip(dog, 0)
new2 = cv2.flip(dog, 1)
new3 = cv2.flip(dog, -1)

cv2.imshow('new', new)
cv2.imshow('dog', dog)
cv2.imshow('new2', new2)
cv2.imshow('new3', new3)
cv2.waitKey(0)

3. 回転

1. 関数API

defsize(InputArray src,rotateCode)

src: 入力画像、
rotateCode: 回転メソッド、次のように:
ああ

2. コードデモ

import cv2
import numpy as np

dog = cv2.imread('./dog.jpeg')
new = cv2.rotate(dog, cv2.ROTATE_90_CLOCKWISE)#顺时针90°
new2 = cv2.rotate(dog, cv2.ROTATE_180)

cv2.imshow('dog', dog)
cv2.imshow('new', new)
cv2.imshow('new2', new2)
cv2.waitKey(0)

4、アフィン変換

端的に言えば、アフィン変換は画像の拡大縮小、平行移動、回転の総称です。

1.アフィン変換API

def warpAffine(src, M, dsize, dst=なし, flags=なし, borderMode=なし, borderValue=なし)

src: 入力画像;
M: 演算行列、2 行 3 列;
dsize: 演算後の行列のサイズ、つまり出力画像のサイズ;
dst: 出力画像;
flags: 補間方法の組み合わせ、サイズ変更関数の補間と同様に、 cv2.resize を確認できます;
borderMode: 境界ピクセルの外挿方法;
borderValue: 定数境界の場合に使用される borderValue 値; デフォルトでは 0 です。

2.パンニング

ああ

3. 変換行列 API

def getRotationMatrix2D (Point2f 中心、倍角、倍スケール)

center: ソース画像の回転の中心;
angle: 度単位の回転角度。正の値は反時計回りの回転を意味します (座標原点が左上隅であると仮定します);
スケール: ズーム率。

4. コードデモ

import cv2
import numpy as np

dog = cv2.imread('./dog.jpeg')
h, w, ch = dog.shape
#M = np.float32([[1, 0, 500], [0, 1, 300]])#x加500(右移),y加300  保证32位
# 旋转的角度为逆时针
# 中心点是 (x,y)
#M = cv2.getRotationMatrix2D((w/2, h/2), 15, 1.0)#15-逆时针旋转角度 1原尺寸
src = np.float32([[400, 300], [800, 300], [400, 1000]])
dst = np.float32([[200, 400], [600, 500], [150, 1100]])
#不明确角度
M = cv2.getAffineTransform(src, dst)#原坐标   现坐标  最好三个点

#如果想改变新图像的尺寸,需要修改dsize
new = cv2.warpAffine(dog, M, (w, h))

print(dog.shape)

cv2.imshow('dog', dog)
cv2.imshow('new', new)
cv2.waitKey(0)

五、視点変換

1. 関数API

def warpPerspective(InputArray src,OutputArray dst,InputArray M,サイズ dsize,int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT,const Scalar& borderValue=Scalar())

src: 入力画像;
dst: 出力画像;
M: 透視変換の行列;
dsize: 出力画像のサイズ;
flags=INTER_LINEAR: 出力画像の補間方法;
borderMode: ピクセル外挿方法 (BORDER_CONSTANT または BORDER_REPLICATE);
borderValue : 使用される値境界が変更されていない場合、デフォルトでは 0 に等しくなります。

2. 変換行列

def getPerspectiveTransform(InputArray src,InputArray dst);

src: ソース画像の四角形頂点の座標;
dst: ターゲット画像に対応する四角形頂点の座標。

3. コードデモ

import cv2
import numpy as np

img = cv2.imread(r"C:\Users\DMr\Pictures\text\perspective.jpeg")

src = np.float32([[100, 1100], [2100, 1100], [0, 4000,], [2500, 3900]])
dst = np.float32([[0, 0], [2300, 0], [0, 3000], [2300, 3000]])
M = cv2.getPerspectiveTransform(src, dst)

new = cv2.warpPerspective(img, M, (2300, 3000))

cv2.imshow('orgin', img)
cv2.imshow('new', new)
cv2.waitKey(0)
cv2.imwrite('./math.png', new)

出力
昇順

Daily "Big Pie":
人生の意味はそれに固執するのではなく常に拡大することです 今日の自分は気にしないでください 私はより良い自分になりたいです

おすすめ

転載: blog.csdn.net/weixin_52051554/article/details/127497935