要实现左键点击选取ROI点并显示ROI多边形,双击左键结束选择,并将原始图片与采集的ROI图像显示出来,可以使用Python和OpenCV库。以下是一个示例代码: ```python import cv2 import numpy as np # 全局变量 points = [] drawing = False image = None original_image = None def click_event(event, x, y, flags, param): global points, drawing, image if event == cv2.EVENT_LBUTTONDOWN: if not drawing: drawing = True points = [(x, y)] else: points.append((x, y)) if len(points) > 1: cv2.line(image, points[-2], points[-1], (0, 255, 0), 2) if len(points) > 2: cv2.fillPoly(image, [np.array(points)], (0, 255, 0)) cv2.imshow('Image', image) elif event == cv2.EVENT_LBUTTONDBLCLK: if drawing: drawing = False if len(points) > 2: # 闭合多边形 cv2.line(image, points[-1], points[0], (0, 255, 0), 2) cv2.fillPoly(image, [np.array(points)], (0, 255, 0)) # 提取ROI mask = np.zeros(image.shape[:2], dtype=np.uint8) cv2.fillPoly(mask, [np.array(points)], 255) roi_image = cv2.bitwise_and(original_image, original_image, mask=mask) # 显示原始图片和ROI图片 combined = np.hstack((original_image, roi_image)) cv2.imshow('Original and ROI Image', combined) # 读取图像 original_image = cv2.imread('path_to_your_image.jpg') image = original_image.copy() # 创建窗口 cv2.namedWindow('Image') cv2.setMouseCallback('Image', click_event) # 显示图像 cv2.imshow('Image', image) # 等待按键 while True: key = cv2.waitKey(1) & 0xFF if key == 27: # 按ESC键退出 break # 关闭所有窗口 cv2.destroyAllWindows() ``` 代码说明: 1. 全局变量:`points`用于存储用户点击的点,`drawing`用于标记是否正在绘制多边形,`image`用于显示当前状态的图像,`original_image`用于保存原始图像。 2. 鼠标事件回调函数:`click_event`处理鼠标事件。单击左键时添加点并绘制线段,双击左键时结束绘制并提取ROI。 3. 读取图像:从指定路径读取图像,并创建一个副本用于显示。 4. 创建窗口:创建一个窗口并设置鼠标事件回调函数。 5. 显示图像:显示初始图像。 6. 等待按键:进入循环等待用户按键,按ESC键退出程序。 使用方法: 1. 运行代码。 2. 在打开的图像窗口中,单击左键选择多边形的顶点。 3. 双击左键结束选择,程序会显示原始图像和提取的ROI图像。 4. 按ESC键退出程序。 请确保你已经安装了OpenCV库,可以使用以下命令安装: ```bash pip install opencv-python ``` 希望这个示例对你有帮助!如果有任何问题,请随时提问。 [2024-11-09 13:23:52 | AI写代码神器 | 784点数解答]