#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 может быть устаревшим указателем из-за пересчета (скажем, если вы включите массовую оптимизацию… и тогда у вас возникнут проблемы с его идентификацией, он будет нормально работать только в режиме отладки …).