namedWindow() вызывает сбой в opencv 2.3.1? (Eclipse MinGW на XP, C )

#eclipse #opencv #mingw

#eclipse #opencv #mingw

Вопрос:

Мне наконец-то удалось заставить opencv 2.3.1 работать с eclipse, mingw и 32-разрядной XP. Я выложу руководство, когда все будет работать, так как я не смог найти его для этого набора инструментов.

Проблема в том, что любая попытка показать результаты в окне вызывает необработанное исключение. Изображения сохраняются нормально, и я смог запустить на них ядро 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:

Вероятно, это связано с этой ошибкой, которая постоянно висит. На самом деле мне пришлось установить BUILD_TYPE=Debug и отключить все оптимизации SSE, чтобы заставить OpenCV работать с Eclipse MinGW.

Комментарии:

1. Блестяще, так что я все-таки не сошел с ума 🙂 Спасибо, я рассмотрю возможность отключения оптимизации SSE. Очень признателен

2. Нет, ты не сумасшедший 🙂 Я тоже некоторое время бился головой о клавиатуру: D

Ответ №2:

Вам не нужно вызывать namedWindow . Он все равно создается при вызове imshow.

Кроме того, используйте lena.empty() , чтобы проверить, правильно ли находится lena в памяти. Это хорошая практика, а иногда lena.data может быть устаревшим указателем из-за пересчета (скажем, если вы включите массовую оптимизацию… и тогда у вас возникнут проблемы с его идентификацией, он будет нормально работать только в режиме отладки …).