import cv2 import numpy as np # 读取图像 img = cv2.imread('123.jpg') new_size=(600,700) img=cv2.resize(img,new_size) # 灰度化处理 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 高斯模糊 Gaussian = cv2.GaussianBlur(gray,(9,9),2) cv2.imwrite('gaosi.jpg',Gaussian) # 边缘检测 edges = cv2.Canny(Gaussian, 100, 200) cv2.imwrite('bianyuan.jpg',edges) # 轮廓检测 contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 找到最大轮廓 max_area = 0 max_contour = None for contour in contours: area = cv2.contourArea(contour) if area > max_area: max_area = area max_contour = contour # 计算矩形边界框 rect = cv2.minAreaRect(max_contour) box = cv2.boxPoints(rect) box = np.int0(box) # 计算变换矩阵 width = int(rect[1][0]) height = int(rect[1][1]) src_pts = box.astype("float32") dst_pts = np.array([[0, height-1], [0, 0], [width-1, 0], [width-1, height-1]], dtype="float32") M = cv2.getPerspectiveTransform(src_pts, dst_pts) # 进行透视变换 result = cv2.warpPerspective(img, M, (width, height)) # 显示结果 cv2.imshow('input', img) cv2.imshow('output', result) cv2.imwrite('result.jpg',result) cv2.waitKey(0)用到的函数解释
时间: 2024-04-05 20:30:05 浏览: 80
解决python cv2.imread 读取中文路径的图片返回为None的问题
5星 · 资源好评率100%
这段代码是使用OpenCV库对给定的图片进行透视变换,具体解释如下:
1. `cv2.imread('123.jpg')`:读取名为'123.jpg'的图片。
2. `cv2.resize(img,new_size)`:将图片进行缩放,大小变为(600,700)。
3. `cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)`:将彩色图像转换为灰度图像。
4. `cv2.GaussianBlur(gray,(9,9),2)`:对灰度图像进行高斯模糊处理,去除图像中的噪声。
5. `cv2.Canny(Gaussian, 100, 200)`:通过边缘检测算法Canny检测边缘。
6. `cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)`:对边缘进行轮廓检测,返回轮廓列表和层级结构。
7. `cv2.minAreaRect(max_contour)`:找到最大轮廓的最小矩形边界框。
8. `cv2.boxPoints(rect)`:根据矩形边界框计算出其四个顶点的坐标。
9. `cv2.getPerspectiveTransform(src_pts, dst_pts)`:根据输入的源点和目标点计算出变换矩阵。
10. `cv2.warpPerspective(img, M, (width, height))`:对原图像进行透视变换,得到变换后的图像。
11. `cv2.imshow()`:显示原图像和变换后的图像。
12. `cv2.imwrite()`:将变换后的图像保存为文件。
13. `cv2.waitKey(0)`:等待键盘输入,0表示一直等待,直到用户按下任意键。
阅读全文