【发布时间】:2015-07-17 05:58:13
【问题描述】:
我研究过 Opencv 的 setMouseCallback 函数。
我知道有几个事件,下面列出:
CV_EVENT_MOUSEMOVE 0,
CV_EVENT_LBUTTONDOWN 1,
CV_EVENT_RBUTTONDOWN 2,
CV_EVENT_MBUTTONDOWN 3,
CV_EVENT_LBUTTONUP 4,
CV_EVENT_RBUTTONUP 5,
CV_EVENT_MBUTTONUP 6,
CV_EVENT_LBUTTONDBLCLK 7,
CV_EVENT_RBUTTONDBLCLK 8,
CV_EVENT_MBUTTONDBLCLK 9,
CV_EVENT_FLAG_LBUTTON 1, CV_EVENT_FLAG_RBUTTON 2, CV_EVENT_FLAG_MBUTTON 4, CV_EVENT_FLAG_CTRLKEY 8, CV_EVENT_FLAG_SHIFTKEY 16, CV_EVENT_FLAG_ALTKEY 32,
利用从这些事件中得到的坐标,我可以绘制,例如:直线、圆、椭圆……等等。
但我想画随机线而不是直线,就像 Microsoft Paint 中的“铅笔”或“画笔”功能。
当我的鼠标在图像中移动时,CV_EVENT_MOUSEMOVE 确实会返回所有坐标,但我不知道如何将它与 CV_EVENT_LBUTTONDOWN 组合以表示“开始绘制线”和 CV_EVENT_LBUTTONUP 以表示“结束绘制线”?
有人知道如何使用 setMouseCallback 实现我的要求吗?
【问题讨论】:
-
使用 buttondown 事件开始绘图(设置 bool 为 true),记住最后鼠标位置。然后 mousemove 事件(如果 drawBool 设置为 true)从最后一个鼠标位置到当前鼠标位置绘制一条线。 mouseup 事件时停止绘图
-
谢谢你的建议,不知怎的给了我一个提示。