Opencv C++为每个imshow打开两个窗口

Posted

技术标签:

【中文标题】Opencv C++为每个imshow打开两个窗口【英文标题】:Opencv C++ Opens Two Window for Each imshow 【发布时间】:2018-04-05 07:59:22 【问题描述】:

我在 Visual Studio 中使用 OpenCV 3.3.0 for c++。问题是当我使用这段代码时,它会打开两个同名的窗口,其中一个包含图像,另一个是多余的和空的。 (Screenshot from the two windows )

cv::Mat im0 = cv::imread("C:\\Users\\MY_PC\\Desktop\\Image.bmp"); //read the image
cv::resize(im0, I, cv::Size(640, 480), 0, 0, CV_INTER_LINEAR); //Resize the image to 640x480


cv::namedWindow("HI");
cv::imshow("HI", I);
cv::waitKey(0);

这个问题之后更重要的问题是waitkey() 函数只适用于额外的窗口,我应该按下该窗口上的键以查看另一个窗口中的更改。

此外,setMouseCallback 也有同样的问题,鼠标命令在包含图像的窗口上不起作用。非常感谢。

【问题讨论】:

我没有看到任何错误,但是我通常是这样写的: const char* display_name = "Display";//显示名称 namedWindow(display_name, WINDOW_AUTOSIZE);//创建显示 我在 3.4.0 版本 x64 上遇到了类似的问题 【参考方案1】:

我对项目类型“Win32 控制台应用程序”有同样的问题。 如果您使用“空项目”,问题就会消失。

【讨论】:

【参考方案2】:

尝试注释掉cv::namedWindow("HI");这一行,可以吗?

很遗憾,其他两个我帮不上忙。

【讨论】:

不,没有“namedWindow”,“imshow”将无法工作(发生异常错误)。 @Peyman 我刚刚检查了没有此类问题的代码,请尝试cv::namedWindow("HI", 1);。现在怎么样?如果可行,我将编辑我的答案。 您的意思是“WINDOW_AUTOSIZE”吗?不,不幸的是它对我的问题没有影响。我认为问题与 opencv 库或 Visual Studio 设置有关。【参考方案3】:

我在您共享的代码中没有发现任何错误。 但是,我通常是这样写的:

const char* display_name = "Display";//Display name
namedWindow(display_name, WINDOW_AUTOSIZE);//Create Display
imshow(display_name, frame);//Display Image
waitKey(0);//Wait a key to be pressed

【讨论】:

【参考方案4】:

对于 x64:删除 opencv_world410.lib 并从附加依赖项中添加 opencv_world410d.lib (通用属性->链接器->输入->附加依赖)

此链接可帮助您为所有项目创建配置文件: https://docs.opencv.org/4.1.0/dd/d6e/tutorial_windows_visual_studio_opencv.html

【讨论】:

以上是关于Opencv C++为每个imshow打开两个窗口的主要内容,如果未能解决你的问题,请参考以下文章

cv2.imshow() 函数打开一个总是说没有响应的窗口 - python opencv

Opencv:无法打开显示:C++、Raspberry Pi 无头连接

OpenCV - imshow()在等待来自命令窗口的输入时没有响应

简单的 C++ OpenCV imshow 示例因分段错误而崩溃

cv2.imshow 不显示网络摄像头视频并且不打开任何窗口

Opencv - 如何使用与多个线程共享的 imshow() 方法相同的窗口