gpt4 book ai didi

c++ - opencv 窗口在鼠标回调时不刷新

转载 作者:太空宇宙 更新时间:2023-11-03 22:29:03 25 4
gpt4 key购买 nike

我正在尝试在 opencv 窗口中使用鼠标移动进行绘制。但是当我画画的时候,窗口上什么也没有画。当我尝试从左上角的十字关闭窗口(ubuntu)时,它会打开一个新窗口,它应该是因为我没有按下转义键,在这个新窗口中,我可以看到我的绘图。我不明白这个问题。我认为使用鼠标回调刷新窗口有问题。这是代码...

bool drawing = false; //true if mouse is pressed
Mat img;

void draw(int event, int x, int y, int flags, void* param){
if (event == CV_EVENT_LBUTTONDOWN){
drawing = true;
} else if (event == CV_EVENT_MOUSEMOVE){
if (drawing) circle(img,Point(x,y),4,Scalar(255,255,255),-1);
} else if (event == CV_EVENT_LBUTTONUP){
drawing = false;
circle(img,Point(x,y),2,Scalar(255,255,255),-1);
}
}

int main(){
// Create black empty images
img = Mat::zeros(window_width, window_height, CV_8UC3);

namedWindow( window_name, CV_WINDOW_AUTOSIZE ); // Create a window for display.
setMouseCallback(window_name, draw, &img); //set the callback function for any mouse event

while(true){
imshow(window_name, img);
if (waitKey(0) == 27) break;
}

destroyAllWindows();
return 0;
}

有什么帮助吗?

最佳答案

你的代码适合我。

但是您使用了cv::waitKey(0),这意味着程序会在那里等待,直到您按下键盘键。所以尝试在绘图后按一个键,或者使用 cv::waitKey(30) 代替。

如果这对您没有帮助,请在您的回调函数中添加一些 std::cout 以验证它是否真的被调用。

顺便说一句,Mat::zeros(window_width, window_height, CV_8UC3); 可能应该是 Mat::zeros(window_height, window_width, CV_8UC3); 而不是如果你变量名称应直观

关于c++ - opencv 窗口在鼠标回调时不刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30982704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com