"chuyuhuntou": ["chuyuhuntou.jpg","luodibao.jpg"]这个列表有两个图片,做一个画框的函数,鼠标左键拖动画框,鼠标右键结束画框,需要在画框的过程中看到框线,鼠标在的地方可以看到一个巨大的十字索引线,画完的框不能消失
时间: 2024-04-21 08:22:49 浏览: 41
好的,根据你的要求,我会在两张图片上实现画框的功能,并确保画框的过程中能够即时看到框线和巨大的十字索引线,并且画完的框不会消失。以下是一个示例代码,使用Python和OpenCV库来实现:
```python
import cv2
# 创建画框的回调函数
def draw_rectangle(event, x, y, flags, param):
global drawing, top_left_pt, bottom_right_pt, img_copy
if event == cv2.EVENT_LBUTTONDOWN: # 鼠标左键按下
drawing = True
top_left_pt = (x, y)
elif event == cv2.EVENT_LBUTTONUP: # 鼠标左键释放
drawing = False
bottom_right_pt = (x, y)
cv2.rectangle(img_copy, top_left_pt, bottom_right_pt, (0, 255, 0), 2)
elif event == cv2.EVENT_MOUSEMOVE: # 鼠标移动
img_copy = img.copy()
if drawing:
cv2.rectangle(img_copy, top_left_pt, (x, y), (0, 255, 0), 2)
# 绘制巨大的十字索引线
cv2.line(img_copy, (0, y), (img_copy.shape[1], y), (0, 0, 255), 3)
cv2.line(img_copy, (x, 0), (x, img_copy.shape[0]), (0, 0, 255), 3)
cv2.imshow('image', img_copy)
# 图片列表
image_list = ["chuyuhuntou.jpg", "luodibao.jpg"]
for image_path in image_list:
# 读取图片
img = cv2.imread(image_path)
img_copy = img.copy()
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_rectangle)
drawing = False
top_left_pt, bottom_right_pt = (-1, -1), (-1, -1)
while True:
cv2.imshow('image', img_copy)
# 按下ESC键退出当前图片,按下'q'键退出程序
key = cv2.waitKey(1)
if key == 27: # ESC键
break
elif key == ord('q'):
exit()
cv2.destroyAllWindows()
```
该代码会循环遍历图片列表中的每张图片,并在每张图片上实现画框的功能。你可以使用鼠标左键拖动来画框,在画框的过程中能够即时看到框线和巨大的十字索引线。绘制的框以绿色边框显示在窗口中,十字索引线以红色显示,且十字索引线的宽度更粗。按下ESC键可以退出当前图片的绘制,按下'q'键可以退出程序。
请确保将图片文件(chuyuhuntou.jpg和luodibao.jpg)与代码文件放在同一目录下或者提供正确的图片路径。
希望这个例子对你有帮助!如果还有其他问题,请随时提问。
阅读全文