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 的窗口大小不一致

opencv中的cv2.namedWindow()函数使用

贪玩巴斯角点预检测 涉及知识详解——「Opencv库以及内置函数namedWindow(),cvResizeWindow(),cvFindChessboardCorn的详解」2021-10-29(代码

OpenCV:在imshow() 之前使用namedWindow() 的必要性讨论?

关于opencv的cv2.WINDOW_一类

opencv可视化操作