【问题标题】:OpenCV imshow() does not workOpenCV imshow() 不起作用
【发布时间】:2013-11-03 02:54:04
【问题描述】:

我写了一个openCV代码,我的代码有以下语句:

cv::imshow("Matches", matchesImg);
cv::waitKey(0);

当我在 Debug 或 Release 中运行代码时,我无法看到显示输出的窗口。

这发生在我创建的每个项目中。

无法弄清楚原因,有人可以指导我吗?

我在 Windows 7 和 Visual Studio 2010 上编码,opencv 版本为 2.4.6

【问题讨论】:

  • 你能证明你是如何确信matchesImg是有效的吗?你得到什么错误?
  • 遇到了类似的问题,看看是否可行:cv::namedWindow("Matches"); cv::imshow("Matches", matchesImg); cv::waitKey();
  • Alex 这行得通。非常感谢。
  • @CTZStef 是的,你先说了。您应该将其发布为答案!我认为您必须首先使用namedWindow 显式创建一个窗口这一事实是 OpenCV 中的一个错误。
  • @Armin Mustafa,您能否围绕您提供的两行发布更多代码,以便我们了解为什么 cv::namedWindow("Matches"); 显然可以解决问题?另外,您是在使用 OpenCV 的预构建版本,还是自己重新构建。还有什么值得注意的,比如 OpenGL 或 QT?

标签: c++ visual-studio-2010 opencv io computer-vision


【解决方案1】:

正如我在 cmets 中提到的,您必须先创建一个窗口,使用与 imshow 相同的窗口名称的 namedWindow 有关详细信息,请参阅此tutorial

编辑

This 强烈建议您必须事先创建窗口。 有些人可能会争辩说,它不适用于以前版本的 OpenCV。然后,假设这个解决方案至少适用于 OpenCV 2.4.6,这是这里关注的版本(它解决了问题)。

【讨论】:

  • 虽然这对于 2.4.6 来说可能是正确的,但在 2.4.4 上却不是(至少对我而言)。
  • 我刚刚检查了 2.4.4 的源代码。 imshow() 只调用 cvShowImage() 并且,至少在 Windows 上,如果命名窗口不存在,则调用 cvNamedWindow() 来创建它。因此,您的答案不适用于 Windows 7 上的 OpenCV 2.4.4,也可能不适用于其他平台。
  • 在您提供的链接中,我看不到任何暗示(即使是微弱的)必须事先创建窗口的内容。查看函数imshow() 的C++ 源代码,我发现它只是调用了C 函数cvShowImage()。你可以在github.com/Itseez/opencv/blob/2.4.6/modules/highgui/src/… 看到。您还可以在 github.com/Itseez/opencv/blob/2.4.6/modules/highgui/src/… 看到 cvShowImage() 做了什么。自己试试? OP的代码可能还有其他事情发生。这些链接适用于 OpenCV 2.4.6。
  • 如果你想要非默认的窗口属性,你需要调用namedWindow()
  • @CTZStef - KeillRandor 是正确的。教程不用看,看源码! imshow() 调用 cvShowImage() 并且,至少对于 Windows,如果窗口不存在,则执行此代码:cvNamedWindow(name, CV_WINDOW_AUTOSIZE);。如果由于某种原因CV_WINDOW_AUTOSIZE 不适合您,您只需要先致电namedWindow()。 OTH,也许icvFindWindowByName() 中有一个错误。但这并不影响我 - 从未使用过 namedWindow()
猜你喜欢
  • 2015-09-18
  • 2015-02-23
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-10
  • 1970-01-01
相关资源
最近更新 更多