# 透视变换复习 import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('sudoku.jpg') 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 = cv2.getPerspectiveTransform(pts1,pts2) dst = cv2.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() img = cv2.imread('road.png') cv2.circle(img, (270,160),2, (0,0,255),2) cv2.circle(img, (330,160),2, (0,0,255),2) cv2.circle(img, (32,260),2, (0,0,255),2) cv2.circle(img, (555,260),2, (0,0,255),2) cv2.imshow('draw', img) cv2.waitKey(0) import matplotlib.pyplot as plt rows,cols,ch = img.shape pts1 = np.float32([[270,160],[328,160],[32,260],[575,260]]) pts2 = np.float32([[20,0],[510,0],[20,103],[510,103]]) M = cv2.getPerspectiveTransform(pts1,pts2) dst = cv2.warpPerspective(img,M,(523,100)) dst = cv2.resize(dst, None, fx=0.5,fy=4.0) plt.subplot(121),plt.imshow(img),plt.title('Input') plt.subplot(122),plt.imshow(dst),plt.title('Output') plt.show() 在每句代码后详细解释注释这段代码
时间: 2023-10-15 17:08:14 浏览: 163
```
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取一张图片
img = cv2.imread('sudoku.jpg')
# 获取图片的行、列、通道数
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
M = cv2.getPerspectiveTransform(pts1,pts2)
# 进行透视变换
dst = cv2.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()
# 读取另一张图片
img = cv2.imread('road.png')
# 在图片上标记四个点
cv2.circle(img, (270,160),2, (0,0,255),2)
cv2.circle(img, (330,160),2, (0,0,255),2)
cv2.circle(img, (32,260),2, (0,0,255),2)
cv2.circle(img, (555,260),2, (0,0,255),2)
# 显示标记后的图片
cv2.imshow('draw', img)
cv2.waitKey(0)
# 获取图片的行、列、通道数
rows,cols,ch = img.shape
# 定义变换前后四个点的坐标
pts1 = np.float32([[270,160],[328,160],[32,260],[575,260]])
pts2 = np.float32([[20,0],[510,0],[20,103],[510,103]])
# 计算透视变换矩阵M
M = cv2.getPerspectiveTransform(pts1,pts2)
# 进行透视变换
dst = cv2.warpPerspective(img,M,(523,100))
# 缩放变换后的图片
dst = cv2.resize(dst, None, fx=0.5,fy=4.0)
# 显示原始图片和透视变换后的图片
plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()
```
代码的详细解释如下:
1. 导入需要的库cv2、numpy和matplotlib.pyplot。
2. 读取一张图片(这里是sudoku.jpg)。
3. 获取图片的行、列、通道数。
4. 定义变换前后四个点的坐标(pts1和pts2),这些点用于计算透视变换矩阵M。在这个例子中,我们想要将数独图片的四个角变换为一个矩形,以便进行后续处理。
5. 使用cv2.getPerspectiveTransform()函数来计算透视变换矩阵M。
6. 使用cv2.warpPerspective()函数将原始图像img进行透视变换,并将变换后的图像保存为dst。
7. 使用plt.subplot()和plt.imshow()函数将原始图像和透视变换后的图像显示出来,以供观察和比较。
8. 读取另一张图片(这里是road.png)。
9. 在图片上标记四个点,以便后续计算透视变换矩阵。
10. 显示标记后的图片。
11. 再次获取图片的行、列、通道数。
12. 重新定义变换前后四个点的坐标,这些点用于计算透视变换矩阵M。在这个例子中,我们想要将道路的四个角变换为一个矩形,以便进行后续处理。
13. 使用cv2.getPerspectiveTransform()函数来计算透视变换矩阵M。
14. 使用cv2.warpPerspective()函数将原始图像img进行透视变换,并将变换后的图像保存为dst。
15. 使用cv2.resize()函数对变换后的图像进行缩放,以便更好地观察。
16. 使用plt.subplot()和plt.imshow()函数将原始图像和透视变换后的图像显示出来,以供观察和比较。
阅读全文