赞
踩
void warpAffine(InputArray src, OutputArray dst, InputArray M,
Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT,
const Scalar& borderValue=Scalar())
参数InputArray src:输入变换前的图像;
参数OutputArray dst:输出变换后图像,需要初始化一个空矩阵用来保存结果,不用设定矩阵尺寸;
参数Size dsize:设置输出图像大小;
参数int flags=INTER_LINEAR:设置插值方式,默认方式为线性插值;
后两个参数不常用,在此不赘述。
void warpPerspective(InputArray src, OutputArray dst, InputArray M,
Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT,
const Scalar& borderValue=Scalar())
Mat getAffineTransform(const Point2f* src, const Point2f* dst)
参数const Point2f* src:原图的三个固定顶点
参数const Point2f* dst:目标图像的三个固定顶点
返回值:Mat型变换矩阵,可直接用于warpAffine()函数
注意,顶点数组长度超过3个,则会自动以前3个为变换顶点;数组可用Point2f[]或Point2f*表示
Mat getPerspectiveTransform(const Point2f* src, const Point2f* dst)
dst = cv2.warpAffine(img, M, (cols,rows))
dst = cv2.warpPerspective(src, M, dsize[, flags[, borderMode[, borderValue]]])
dst:透视后的输出图像,dsize决定输出图像大小
src:输入图像
M:3*3变换矩阵
flags:插值方法,默认为INTER_LINEAR
borderMode:边类型,默认为BORDER_CONSTANT
borderValue:边界值,默认为0
retval = cv.getAffineTransform(src, dst)
src:输入图像的三个点坐标
dst:输出图像的三个点坐标
三个点分别对应左上角、右上角、左下角
M = cv2.getPerspectiveTransform(pts1, pts2)
#------------ warpAffine import numpy as np import cv2 rect_img = np.zeros((512, 512), dtype=np.uint8) rect_img = cv2.cvtColor(rect_img, cv2.COLOR_GRAY2BGR) pts = [(50, 50), (100, 200)] cv2.rectangle(rect_img, pts[0], pts[1], (0,255,0), 2) cv2.circle(rect_img, (50, 200), 2, (255,0,0), 2) cv2.imshow('img', rect_img) # move rows, cols = rect_img.shape[:2] moveM = np.float32([[1, 0, 100], [0, 1, 50]]) #构建平移矩阵 dst = cv2.warpAffine(rect_img, moveM, (rows, cols)) cv2.imshow('img_move', dst) # resize # cv2.resize() # Rotation # OpenCV直接提供了 cv.getRotationMatrix2D()函数来生成这个矩阵,该函数有三个参数: # 参数1:图片的旋转中心 # 参数2:旋转角度(正:逆时针,负:顺时针) # 参数3:缩放比例,0.5表示缩小一半 r_M = cv2.getRotationMatrix2D((50,200), 90, 1) dst = cv2.warpAffine(rect_img, r_M, (cols, rows)) cv2.imshow('img_r', dst) # reverse # dst = cv2.flip(img, 1) # 其中,函数中的第二个参数大于0,表示图像水平翻转(沿y轴); # 第二个参数等于0,表示图像垂直翻转(沿x轴); # 第二个参数小于0,表示图像既水平翻转,又垂直翻转。 dst = cv2.flip(rect_img, 0) cv2.imshow('img_f', dst) cv2.waitKey(0) cv2.destroyAllWindows()
# import the necessary packages from imutils import perspective import numpy as np import cv2 # load the notecard code image, clone it, and initialize the 4 points # that correspond to the 4 corners of the notecard notecard = cv2.imread("../demo_images/notecard.png") clone = notecard.copy() pts = np.array([(73, 239), (356, 117), (475, 265), (187, 443)]) # loop over the points and draw them on the cloned image for (x, y) in pts: cv2.circle(clone, (x, y), 5, (0, 255, 0), -1) # apply the four point tranform to obtain a "birds eye view" of # the notecard warped = perspective.four_point_transform(notecard, pts) # show the original and warped images cv2.imshow("Original", clone) cv2.imshow("Warped", warped) cv2.waitKey(0)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。