# 用opencv对一图片完成平移(X方向20px,Y方向20px)、缩小(0.5倍)、放大(2倍)、旋转(逆时针90度)、翻转(水平)、仿射(任意)、透视(任意)操作,所有操作后与原图保持相同大小 import cv2 as cv import numpy as np image = cv.imread('img.jpg', cv.IMREAD_UNCHANGED) height, width = image.shape[:2] # 1.平移 M_translate = np.float32([[1, 0, 20], [0, 1, 20]]) image_translate = cv.warpAffine(image, M_translate, (width, height)) # 2.缩小操作(0.5倍) image_resized_small = cv.resize(image, (0, 0), fx=0.5, fy=0.5) # 3.放大操作(2倍) image_resized_large = cv.resize(image, (0, 0), fx=2, fy=2) # 4.旋转操作(逆时针90度) M_rotate = cv.getRotationMatrix2D((width / 2, height / 2), -90, 1) image_rotated = cv.warpAffine(image, M_rotate, (width, height)) # 5.翻转操作(水平翻转) image_flipped = cv.flip(image, 1) # 6.仿射变换(任意) # 三个点的原图与目标图像对应 pts1 = np.float32([[50, 50], [200, 50], [50, 200]]) pts2 = np.float32([[10, 100], [250, 50], [100, 250]]) M_affine = cv.getAffineTransform(pts1, pts2) image_affine = cv.warpAffine(image, M_affine, (width, height)) # 7.透视变换(任意) # 四个点的原图与目标图像对应 pts1 = np.float32([[56, 65], [368, 52], [28, 387], [389, 390]]) pts2 = np.float32([[0, 0], [width, 0], [0, height], [width, height]]) M_perspective = cv.getPerspectiveTransform(pts1, pts2) image_perspective = cv.warpPerspective(image, M_perspective, (width, height)) # 展示 cv.imshow('原图', image) cv.imshow('1.平移', image_translate) cv.imshow('2.缩小操作(0.5倍)', image_resized_small) cv.imshow('3.放大操作(2倍)', image_resized_large) cv.imshow('4.旋转操作(逆时针90度)', image_rotated) cv.imshow('5.翻转操作(水平翻转)', image_flipped) cv.imshow('6.仿射变换(任意)', image_affine) cv.imshow('7.透视变换(任意)', image_perspective) cv.waitKey(0) cv.destroyAllWindows()