我试图画矩形使用鼠标作为输入与Opencv在c++。我想通过拖放来画一个矩形。
我怎样才能画出干净的矩形?在这里我可以看到画一个真正的矩形。就像我们在油漆里做的那样
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace cv;
using namespace std;
Mat img;
Point ptOld;
void on_mouse(int event, int x, int y, int flags, void*);
int main(void)
{
img = imread("lenna.bmp");
if (img.empty()) {
cerr << "Image load failed" << endl;
return -1;
}
namedWindow("img");
setMouseCallback("img", on_mouse);
imshow("img", img);
waitKey(0);
return 0;
}
void on_mouse(int event, int x, int y, int flags, void*)
{
switch (event) {
case EVENT_LBUTTONDOWN:
ptOld = Point(x, y);
break;
case EVENT_LBUTTONUP:
ptOld = Point(x, y);
break;
case EVENT_MOUSEMOVE:
if (flags & EVENT_FLAG_LBUTTON) {
rectangle(img, ptOld, Point(x,y), Scalar(0, 255, 0), 3);
imshow("img", img);
ptOld = Point(x, y);
}
break;
default:
break;
}
}
lenna
有人能告诉我为什么会这样吗有什么解决办法吗??
我想要这个结果。
[示例] https://i.stack.imgur.com/hvXMP.png
1条答案
按热度按时间z3yyvxxp1#
你应该在两个图像上操作。一个是通过鼠标移动事件绘制当前选中的矩形。当按钮事件发生时,此图像是下一个矩形绘制操作的入口点,并且应该存储在第二个图像中。