我可以成功构建并执行以下代码:
IplImage* img = cvLoadImage("C:\\hello.jpg");
cvNamedWindow("myfirstwindow");
cvShowImage("myfirstwindow", img);
但是在执行下面的代码时我得到了未处理的异常:
cv::Mat image= cv::imread("boldt.jpg");
cv::namedWindow("Image");
cv::imshow("Image",image);
虽然,我可以成功构建代码。
我在Windows 7 x86版本上使用opencv2.2和VS2010 x86版本。 请帮忙!
更新:我在winxp上尝试过它,它工作正常......只有在发布模式下win7才能正常工作。
答案 0 :(得分:5)
可能这个问题是人们没有意识到当VStudio运行你的应用程序时,它试图在与编译的可执行文件相同的目录中找到它的资源,并且不是在源文件所在的文件夹中。
您的第一个代码有效,因为您正在加载通过FULL PATH传递给文件的图像!
这就是为什么在编码时检查函数是否成功非常重要的原因:
try
{
cv::Mat image = cv::imread("boldt.jpg");
if (!image.data)
printf("!!! No data !!!");
}
catch(std::exception e)
{
printf("Exception: [%s]\n", e.what());
}
这种编程实践将为您节省大量时间。
修改强>:
好吧,如果崩溃仍然发生,则意味着可能是cv::namedWindow()
或cv::imshow()
错误,my money is on cv::namedWindow()
。
其他用户在Windows上报告了类似行为:
OpenCV 2.2 Windows XP MinGW build crashes on namedWindow, imshow
Open CV crashes under WIN7 when opening NamedWindow
namedWindow() causes crash in opencv 2.3.1? (Eclipse+MinGW on XP, C++)
答案 1 :(得分:3)
我正在使用OpenCV 2.3.1,当我在发布模式下运行它(链接到发布的highgui lib)时,一切都很好。 当我切换到调试模式(仍然链接到释放highgui lib)时,它崩溃了。 链接到调试highgui lib有帮助。
也许你有同样的问题...
答案 2 :(得分:1)
您是否检查过imread()函数的输出?
if(image.empty())
{
cout << "where's my image?" << endl;
return 0;
}
答案 3 :(得分:1)
我遇到了与上述问题完全相同的问题。
事实证明,问题在很大程度上取决于链接器的设置!
我在另一个帖子中找到了答案: OpenCV 2.3 and Visual Studio 2010
这是:
“项目的属性(右键单击它)
链接器
一旦我完成了上述操作,我就可以无缝地运行imshow和imread +所有其他cpp函数!提出这个问题的作者可能已经解决了这个问题。但是,以防其他人被带到这里寻找相同的解决方案!
喝彩!
答案 4 :(得分:0)
确保在路径中添加了“C:\ OpenCV2.4.3 \ build \ x86 \ vc10 \ bin”。 NOT(!)“C:\ OpenCV2.4.3 \ build \ x86 \ vc9 \ bin”。这可能会导致问题。
对于opencv与visual studio的使用,有两个非常好的文档:
答案 5 :(得分:0)
签入生成编译的文件夹,因为其中一个是.exe编译的,并且您可能想要打开的图像不在那里。在我的情况下,.exe(在Debuge模式下)位于C:\ Users \ Name \ source \ repos \ HolaMundox \ x64 \ Debug中,而不是我在C:\ Users \ Name \ source上创建我的.cpp \ \回购HolaMundox。类似的东西将适用于发布模式。 另外一点是你必须检查图像的扩展名,如果它是.jpg,.jpeg,.bmp等等...我遇到的一个错误就是我把extencióngan.gand。它是.jpeg