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 示例因分段错误而崩溃