namedWindow() 导致 opencv 2.3.1 崩溃? (在 XP、C++ 上的 Eclipse+MinGW)
Posted
技术标签:
【中文标题】namedWindow() 导致 opencv 2.3.1 崩溃? (在 XP、C++ 上的 Eclipse+MinGW)【英文标题】:namedWindow() causes crash in opencv 2.3.1? (Eclipse+MinGW on XP, C++) 【发布时间】:2011-11-03 13:53:19 【问题描述】:我终于设法让 opencv 2.3.1 与 eclipse、mingw 和 32 位 XP 一起工作。当everzthing 工作时,我会发布一个howto,因为我找不到这个工具链的一个。
问题在于,任何在窗口中显示结果的尝试都会导致未处理的异常。图像保存得很好,我能够在它们上运行 Sobel 内核,所以其他一切看起来都很好。调用namedWindow时似乎崩溃了。
我在链接器中包含 libopencv_core231、libopencv_highgui231、libopencv_imgproc231 和 libopencv_legacy231。
代码如下:
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace cv;
int main(int argc, char **argv)
std::cout<<"Hello"<<std::endl;
//Create image
Mat lena, lenasobel;
//Load lena image
lena = imread("C:\\lena.jpeg");
if(lena.data)
std::cout<<"File has "<<lena.cols<<" rows and "<<lena.rows<<" columns. "<<lena.channels()<<" channels."<<std::endl;
if(!lena.data)
std::cout<<"File Not Read."<<std::endl;
lenasobel=lena.clone();
Sobel(lena,lenasobel,lenasobel.depth(),1,1,3);
std::vector<int> jpg_type;
jpg_type.push_back(100);
jpg_type.push_back(CV_IMWRITE_JPEG_QUALITY);
imwrite("C:\\lenaout.jpeg",lenasobel,jpg_type);
//Save works!
namedWindow( "lena" , CV_WINDOW_AUTOSIZE);
imshow( "lena" ,lena);
return 0;
有人有什么想法吗?我不知道下一步该怎么做!
【问题讨论】:
【参考方案1】:这可能是因为这个bug一直在闲逛。实际上,我必须设置 BUILD_TYPE=Debug
并禁用所有 SSE 优化才能让 OpenCV 与 Eclipse + MinGW 一起工作。
【讨论】:
太棒了,所以我毕竟没有发疯 :) 谢谢,我会考虑禁用 SSE 优化。非常感谢 不,你没疯 :) 我也在这个键盘上敲了一会儿头:D【参考方案2】:你不需要调用namedWindow。无论如何,当您调用 imshow 时,它就会被创建。
另外,使用lena.empty()
来检查 lena 是否在内存中正确。这是一个很好的做法,有时 lena.data 可能由于引用计数而成为过时的指针(例如,如果您打开大规模优化......然后您将难以识别它,它会正常工作only 处于调试模式...)。
【讨论】:
以上是关于namedWindow() 导致 opencv 2.3.1 崩溃? (在 XP、C++ 上的 Eclipse+MinGW)的主要内容,如果未能解决你的问题,请参考以下文章
贪玩巴斯角点预检测 涉及知识详解——「Opencv库以及内置函数namedWindow(),cvResizeWindow(),cvFindChessboardCorn的详解」2021-10-29(代码