diff --git a/5/1.py b/5/1.py new file mode 100644 index 0000000..9886eea --- /dev/null +++ b/5/1.py @@ -0,0 +1,38 @@ +import cv2 as cv +import numpy as np +import matplotlib.pyplot as plt + +plt.rcParams["font.sans-serif"] = ["SimSun"] + +img = cv.imread(r"img\alphabet.jpg", cv.IMREAD_GRAYSCALE) + +dx = dy = 50 +rows, cols = img.shape[:2] +M1 = np.float32([[1, 0, dx], [0, 1, dy]]) # type: ignore +dst1 = cv.warpAffine(img, M1, (cols, rows)) # type: ignore + +M2 = cv.getRotationMatrix2D((cols / 2, rows / 2), 30, 1) +dst2 = cv.warpAffine(img, M2, (cols, rows)) + +M3 = np.float32([[1, 0, 0], [0, -1, rows]]) # type: ignore +dst3 = cv.warpAffine(img, M3, (cols, rows)) # type: ignore + +plt.figure() +plt.subplot(141) +plt.imshow(img, cmap="gray") +plt.title("待处理灰度图像") +plt.axis("off") +plt.subplot(142) +plt.imshow(dst1, cmap="gray") +plt.title("平移变换") +plt.axis("off") +plt.subplot(143) +plt.imshow(dst2, cmap="gray") +plt.title("旋转 30 度") +plt.axis("off") +plt.subplot(144) +plt.imshow(dst3, cmap="gray") +plt.title("垂直镜像") +plt.axis("off") +plt.tight_layout() +plt.show() diff --git a/5/2.py b/5/2.py new file mode 100644 index 0000000..8639d44 --- /dev/null +++ b/5/2.py @@ -0,0 +1,31 @@ +import cv2 as cv +import numpy as np +import matplotlib.pyplot as plt + +plt.rcParams["font.sans-serif"] = ["SimSun"] + +img0 = cv.imread(r"img\alphabet.jpg", cv.IMREAD_GRAYSCALE) +img1 = cv.copyMakeBorder(img0, 50, 50, 50, 50, cv.BORDER_CONSTANT, value=0) # type: ignore +pts1 = np.float32([[50, 50], [200, 50], [50, 200]]) # type: ignore +pts2 = np.float32([[10, 70], [160, 50], [40, 220]]) # type: ignore +rows, cols = img1.shape[:2] +M1 = cv.getAffineTransform(pts1, pts2) # type: ignore +dst1 = cv.warpAffine(img1, M1, (cols, rows)) +M2 = cv.getAffineTransform(pts2, pts1) # type: ignore +dst2 = cv.warpAffine(dst1, M2, (cols, rows)) + +plt.figure() +plt.subplot(131) +plt.imshow(img1, cmap="gray") +plt.title("扩展后的图像") +plt.axis("off") +plt.subplot(132) +plt.imshow(dst1, cmap="gray") +plt.title("仿射变换图像") +plt.axis("off") +plt.subplot(133) +plt.imshow(dst2, cmap="gray") +plt.title("放射校正图像") +plt.axis("off") +plt.tight_layout() +plt.show() diff --git a/5/3.py b/5/3.py new file mode 100644 index 0000000..a2de53a --- /dev/null +++ b/5/3.py @@ -0,0 +1,32 @@ +import cv2 as cv +import matplotlib.pyplot as plt + +plt.rcParams["font.sans-serif"] = ["SimSun"] + +img0 = cv.imread(r"img\alphabet.jpg") +imgT = cv.cvtColor(img0, cv.COLOR_BGR2GRAY) +cv.rectangle(img0, (160, 140), (190, 170), (255, 0, 0), 3) +img = imgT[140:170, 160:190] +img1 = cv.resize(img, None, fx=10, fy=10, interpolation=cv.INTER_NEAREST) +img2 = cv.resize(img, None, fx=10, fy=10, interpolation=cv.INTER_LINEAR) +img3 = cv.resize(img, None, fx=10, fy=10, interpolation=cv.INTER_CUBIC) + +plt.figure() +plt.subplot(141) +plt.imshow(img0, cmap="gray") +plt.title("原图像") +plt.axis("off") +plt.subplot(142) +plt.imshow(img1, cmap="gray") +plt.title("最近邻插值") +plt.axis("off") +plt.subplot(143) +plt.imshow(img2, cmap="gray") +plt.title("双线性插值") +plt.axis("off") +plt.subplot(144) +plt.imshow(img3, cmap="gray") +plt.title("双三次插值") +plt.axis("off") +plt.tight_layout() +plt.show() diff --git a/5/4.py b/5/4.py new file mode 100644 index 0000000..7b0e7c9 --- /dev/null +++ b/5/4.py @@ -0,0 +1,31 @@ +import cv2 as cv +import numpy as np +import matplotlib.pyplot as plt + +plt.rcParams["font.sans-serif"] = ["SimSun"] + +img0 = cv.imread(r"img\alphabet.jpg", cv.IMREAD_GRAYSCALE) +img1 = cv.copyMakeBorder(img0, 20, 20, 20, 20, cv.BORDER_CONSTANT, value=0) # type: ignore +pts1 = np.float32([[20, 20], [220, 20], [20, 220]]) # type: ignore +pts2 = np.float32([[10, 70], [160, 50], [40, 220]]) # type: ignore +rows, cols = img1.shape[:2] +M1 = cv.getAffineTransform(pts1, pts2) # type: ignore +dst1 = cv.warpAffine(img1, M1, (cols, rows)) +M2 = cv.getAffineTransform(pts2, pts1) # type: ignore +dst2 = cv.warpAffine(dst1, M2, (cols, rows)) + +plt.figure() +plt.subplot(131) +plt.imshow(img1, cmap="gray") +plt.title("扩展后的图像") +plt.axis("off") +plt.subplot(132) +plt.imshow(dst1, cmap="gray") +plt.title("仿射变换图像") +plt.axis("off") +plt.subplot(133) +plt.imshow(dst2, cmap="gray") +plt.title("放射校正图像") +plt.axis("off") +plt.tight_layout() +plt.show()