opencv-python 怎么获取4角点xy坐标值
在使用 OpenCV-Python 处理图像时,获取图像中的四个角点的坐标值通常用于图像透视变换(Perspective Transformation)或者图像校正(Image Rectification)。以下是获取四个角点坐标的详细步骤:
方法一:手动选择四个角点
显示图像并选择四个角点:
- 使用 OpenCV 加载图像并显示,然后通过鼠标交互来手动选择图像中的四个角点。这种方法适用于需要交互式地从图像中获取角点的情况。
pythonimport cv2 import numpy as np # 加载图像 img = cv2.imread('your_image.jpg') cv2.imshow('Image', img) # 等待用户交互选择四个角点 pts = [] def mouse_callback(event, x, y, flags, param): if event == cv2.EVENT_LBUTTONDOWN: pts.append((x, y)) cv2.circle(img, (x, y), 5, (0, 0, 255), -1) cv2.imshow('Image', img) if len(pts) == 4: cv2.destroyAllWindows() cv2.setMouseCallback('Image', mouse_callback) cv2.waitKey(0) # 输出四个角点的坐标 print("Corner points:", pts)
手动选择注意事项:
- 确保用户交互时图像窗口未关闭,以便实时显示选定的角点。
- 根据需要可以添加逻辑以确保只选择四个角点,例如在鼠标点击事件处理函数中进行计数和逻辑判断。
方法二:自动检测角点(适用于特定场景)
使用角点检测算法:
- OpenCV 提供了一些角点检测算法,如 Harris 角点检测、Shi-Tomasi 角点检测等,可以自动检测图像中的角点,但需要根据具体场景进行参数调整和筛选。
pythongray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) corners = cv2.goodFeaturesToTrack(gray, 4, 0.01, 10) corners = np.int0(corners) for corner in corners: x, y = corner.ravel() cv2.circle(img, (x, y), 5, (0, 0, 255), -1) cv2.imshow('Image with corners', img) cv2.waitKey(0) # 输出检测到的四个角点坐标 corner_points = [tuple(c[0]) for c in corners] print("Corner points:", corner_points)
自动检测注意事项:
- 自动检测角点需要适当的参数调整(如阈值、角点数目等),以及在实际应用中可能需要进一步处理和筛选检测到的角点。
总结
通过上述方法,可以根据需求选择手动或自动获取图像中的四个角点坐标。手动选择适合于需要交互式操作的场景,而自动检测适合于特定条件下的角点识别。