namedWindow()导致opencv 2.3.1崩溃? (Eclipse + MinGW on XP,C ++)

时间:2011-11-03 13:53:20

标签: eclipse opencv mingw

我终于设法让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;
            }

有没有人有任何想法?我不知道下一步该做什么!

2 个答案:

答案 0 :(得分:3)

这可能是由于这个bug一直悬而未决。我实际上必须设置BUILD_TYPE=Debug并禁用所有SSE优化以使OpenCV与Eclipse + MinGW一起使用。

答案 1 :(得分:0)

您无需调用namedWindow。无论如何,当你调用imshow时它会被创建。

另外,使用lena.empty()检查lena是否在内存中正确。这是一个很好的做法,有时lena.data可能是一个陈旧的指针,因为引用计数(例如,如果你打开大规模的优化......然后你将无法识别它,它将正常工作只< / em>在调试模式下......)。