2013-06-26 3 views
2

Извините за повторение частых вопросов. В настоящее время я пытаюсь настроить openCV с Qt 5.0.2 или выпуском Microsoft VC++ в моих 32-битных Windows 7 без каких-либо успехов. сейчас для QT: -Это QT 5.0.2 MinGW. -Он запускает программы, не используя opencv успешно.Настройка OpenCV в Qt: моя простая программа возвращает исключение

Теперь, OpenCV линии моего .pro файла, как это:

INCLUDEPATH += "C:\opencv\build\include" 
LIBS += "C:\opencv\bin\bin\libopencv_core243.dll" 
LIBS += "C:\opencv\bin\bin\libopencv_highgui243.dll" 

Это потому, что код, как сильфонных приводит к ошибке "не найти core.hpp":

LIBS += -LC:\\opencv\\build\\x86\\vc10\\lib\ 
libopencv_core243 \ 
libopencv_highgui243 \ 

сейчас его автозаполнения функции OpenCV работает, и если вы пишете:

cv::Mat im = cv::imread("D:\\Tulips.jpg"); 

нет никакой ошибки. Но если после этого вы пишете:

cv::imshow("im",im); 

Он закрывает программу с кодом исключения: c0000005 Он даже не попадает в «поймать» обработчика исключений.

Странно, что VC++ express делает то же самое. Я должен упомянуть, что я скомпилировал opencv для MinGW самостоятельно, и сборка была ОК, потому что она работает с Code :: Blocks. Я использовал prebuilt opencv с моим VC++ 10, но это тоже не работает. Pleaase помогите мне! Большое спасибо!

ответ

1

Проверьте, есть ли im.data не имеет значения. Поскольку c0000005 является нарушением прав доступа, это означает, что вы используете некоторые недействительные указатели, поэтому покажите еще один код или лучшее решение - использовать отладчик и пошаговый код.

+0

он даже выходит с этим кодом, если я пишу: cout << im. на самом деле указатель имеет значение null. но почему? файл, который я хочу читать, существует. – Zzzz

+0

Убедитесь, что путь верен и/или файл не поврежден - я не знаком с opencv - возможно, кто-то, кто столкнулся с opencv, может помочь вам в этом, если вы подтвердите, что это не проблема с повреждением файла. – Zlatomir

+0

Спасибо. Я уверен в этом пути. Но теперь я щекочу im.rows и im.cols, и я вижу, что он уменьшает размеры изображения. но если я пишу: cout << im.at (1,1) [0] он возвращает странные символы. изображение имеет три канала. – Zzzz

0

Я наконец нашел свой ответ !! Все это было в брандмауэре. My fireWall заблокировал процесс, и opencv не смог получить доступ к памяти. Когда я использовал cvLoadImage(), он работал, но cv :: imread() не сделал этого. Я добавил исключение для визуального сателлита, но, похоже, этого было недостаточно. Теперь мой брандмауэр выключен, и НАКОНЕЦ ВСЕ ОК OKKK :) :)