From e39ed590b95938f00b20d0b9112d5218c8de59d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=A1=E5=9D=82=E6=98=B4?= Date: Thu, 21 Nov 2024 01:25:57 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=AC=A1=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/homework3/img.jpg | Bin 0 -> 31698 bytes test/homework3/main.py | 51 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 test/homework3/img.jpg create mode 100644 test/homework3/main.py diff --git a/test/homework3/img.jpg b/test/homework3/img.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34d0a4a45e131310201a1f391665ed5584c34d62 GIT binary patch literal 31698 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 literal 0 HcmV?d00001 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()