Opencv4 官方文档 : https://docs.opencv.org/4.2.0/
Opencv4 for Python中文文档点击下载:OpenCV4 for Python 中文文档
其实就是图像的变换 ,包括平移 ,旋转,缩放,仿射,透视等。
def resize_demo(image):
print("Origin size:", image.shape)
# 第一种方法:通过fx,fy缩放因子
res = cv.resize(image, None, fx=2, fy=2, interpolation=cv.INTER_CUBIC)
print("After resize 1 size:", res.shape)
# 第二种方法:直接设置输出图像的尺寸,所以不用设置缩放因子
height,width = image.shape[:2]
res=cv.resize(image,(2*width,2*height),interpolation=cv.INTER_CUBIC)
print("After resize 2 size:", res.shape)
while(1):
cv.imshow('res',res)
cv.imshow('img',image)
if cv.waitKey(0) & 0xFF == ord("q"):
break
效果:原图放大至两倍,改为小数的话就是缩小至相应倍数。
def move_demo(image):
rows, cols = image.shape[:2]
M = np.float32([[1, 0, 100], [0, 1, 50]])
dst = cv.warpAffine(image, M, (cols, rows))
cv.imshow('image', dst)
def rotation_demo(img):
rows, cols = img.shape[:2]
# 将图像相对于中心旋转90度,而不进行任何缩放。旋转中心,角度,缩放比率
M = cv.getRotationMatrix2D((cols / 2, rows / 2), 90, 1)
dst = cv.warpAffine(img, M, (cols, rows))
cv.imshow('original', img)
cv.imshow('result', dst)
cv.waitKey(0)
cv.destroyAllWindows()
效果:
在仿射变换中,原始图像中的所有平行线在输出图像中仍将平行。为了找到变换矩阵,我们需要输入图像中的三个点及其在输出图像中的对应位置。然后cv.getAffineTransform将创建一个2x3
矩阵,该矩阵将传递给cv.warpAffine。
def perspective_demo(img):
rows, cols, ch = img.shape
pts1 = np.float32([[56, 65], [368, 52], [28, 387], [389, 390]])
pts2 = np.float32([[0, 0], [300, 0], [0, 300], [300, 300]])
M = cv.getPerspectiveTransform(pts1, pts2)
dst = cv.warpPerspective(img, M, (300, 300))
plt.subplot(121), plt.imshow(img), plt.title('Input')
plt.subplot(122), plt.imshow(dst), plt.title('Output')
plt.show()
对于透视变换,需要3x3变换矩阵。即使在转换后,直线也将保持直线。要找到此变换矩阵,需要在输入图像上有4个点,在输出图像上需要相应的点。在这四个点中,其中三个不应共线。然后可以通过函数cv.getPerspectiveTransform找到变换矩阵。然后将cv.warpPerspective应用于此3x3转换矩阵。
def perspective_demo(img):
rows, cols, ch = img.shape
pts1 = np.float32([[56, 65], [368, 52], [28, 387], [389, 390]])
pts2 = np.float32([[0, 0], [300, 0], [0, 300], [300, 300]])
M = cv.getPerspectiveTransform(pts1, pts2)
dst = cv.warpPerspective(img, M, (300, 300))
plt.subplot(121), plt.imshow(img), plt.title('Input')
plt.subplot(122), plt.imshow(dst), plt.title('Output')
plt.show()
转载请注明转自:https://leejason.blog.csdn.net/article/details/106442313