diff --git a/test/homework3/img.jpg b/test/homework3/img.jpg new file mode 100644 index 0000000..34d0a4a Binary files /dev/null and b/test/homework3/img.jpg differ diff --git a/test/homework3/main.py b/test/homework3/main.py new file mode 100644 index 0000000..469bd68 --- /dev/null +++ b/test/homework3/main.py @@ -0,0 +1,51 @@ +# 用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()