C++ 64位OpenCV与Visual Studio 2013-cv::namedWindow()的奇怪行为

C++ 64位OpenCV与Visual Studio 2013-cv::namedWindow()的奇怪行为,c++,opencv,visual-studio-2013,window,x86-64,C++,Opencv,Visual Studio 2013,Window,X86 64,当前正在尝试使用OpenCV显示uEye相机的流。为此,我可以使用Visual Studio 2013和OpenCV 2.4.9 64位。由于事情还没有接近一个发行版,所以我使用的调试库是用VisualStudio2012编译的OpenCV附带的 我试图将相机返回的图像数据存储到cv::Mat对象中。在得到一些关于cvNamedWindow的空指针字符串名称的奇怪错误后,我决定检查我是否能够实际运行一段非常基本的代码——读取PNG图像并在窗口中显示它。嗯,它不起作用了。。。我的错误可能仍然存在于

当前正在尝试使用OpenCV显示uEye相机的流。为此,我可以使用Visual Studio 2013和OpenCV 2.4.9 64位。由于事情还没有接近一个发行版,所以我使用的调试库是用VisualStudio2012编译的OpenCV附带的

我试图将相机返回的图像数据存储到cv::Mat对象中。在得到一些关于cvNamedWindow的空指针字符串名称的奇怪错误后,我决定检查我是否能够实际运行一段非常基本的代码——读取PNG图像并在窗口中显示它。嗯,它不起作用了。。。我的错误可能仍然存在于我使用的memcpy中,但如果你阅读下面的内容,你会发现我也测试了一个不涉及摄像头的案例

无论我给出图像的绝对路径,还是仅仅指向EXE所在的文件,我都会从cv::imshow中得到一个断言失败,即高度和/或宽度都不>0。还有一件事让我印象深刻——窗口的名称乱七八糟——奇怪的符号、空格等。与我指定的名称无关:camOutput 此外,我决定手动创建一个CV_8U3类型的矩阵,并用黑色像素填充它来测试。OpenCV显示了该图像,但窗口的名称再次被弄乱。这一次,我能够阅读以下内容,这似乎是命令的一部分: n在DOS模式下$

我从来没有见过如此奇怪的行为,尤其是当涉及到imshow、imread或namedWindow时。此外,我也无法解释为什么imread返回一个空矩阵,而不管我输入什么。尝试了PNG、JPEG和BMP-总是相同的崩溃


<>编辑:我创建了一个空C++项目,并把所有的设置从前一个转移。现在它开始工作了。甚至我的uEye相机的memcpy也很好,我可以在OpenCV窗口中显示输出。我不知道我以前的项目有什么问题。将不得不进一步分析,因为问题可能会再次发生。但是,我会将此问题保留为打开状态。

您不能安全地使用与应用程序使用的编译器不同的编译器编译的opencv。这会创建多个堆和其他CRT不兼容。尽管我相信opencv在一些官方软件包中提供了vc12二进制文件夹。这是针对VisualStudio2013的。VC11是VisualStudio 2012。所以我必须用VS 2013—--运载的Visual C++编译器来构建整个OpenCV。如果您没有vc12文件夹,请单击“是”。以下是有关编译器版本的更多信息:我有vc12文件夹,我使用../build/x64/vc12中的libs