opencv窗口在鼠标回调时未刷新



我正试图在opencv窗口中用鼠标移动进行绘制。但当我画画时,窗户上什么也画不出来。当我试图从左上方的十字架(ubuntu)关闭窗口时,它会打开一个新窗口,因为我没有按下escape键,所以它应该是这样的,在这个新窗口中,我可以看到我的画。我不能理解这个问题。我认为用鼠标回调刷新窗口有问题。这是代码。。。

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);

相关内容

  • 没有找到相关文章

最新更新