2013-11-14 3 views
1

Я недавно установил OpenCV 2.4.7 и настроил его на мой Visual Studio 2010 Ultimate язь ... я даже протестировали код для отображения изображения ...OpenCV - необработанное исключение в VideoCapture

#include "opencv2/highgui/highgui.hpp" 
#include "iostream" 

using namespace cv; 
using namespace std; 

int main() 
{ 
    Mat im = imread("d:/lena.jpg"); 
    if (im.empty()) 
    { 
     cout << "Cannot load image!" << endl; 
     return -1; 
    } 
    imshow("Image", im); 
    waitKey(0); 
} 

и его работает, но когда я пытаюсь использовать код VideoCapture данную here, он дает ошибку ..

#include "opencv2/opencv.hpp" 

using namespace cv; 

int main(int, char**) 
{ 
    VideoCapture cap(0); // open the default camera 
    if(!cap.isOpened()) // check if we succeeded 
     return -1; 

    Mat edges; 
    namedWindow("edges",1); 
    for(;;) 
    { 
     Mat frame; 
     cap >> frame; // get a new frame from camera 
     cvtColor(frame, edges, CV_BGR2GRAY); 
     GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5); 
     Canny(edges, edges, 0, 30, 3); 
     imshow("edges", edges); 
     if(waitKey(30) >= 0) break; 
    } 
    // the camera will be deinitialized automatically in VideoCapture destructor 
    return 0; 
} 

Необработанное исключение в 0x75dc812f в myNewOpenCv1.exe: Microsoft C++ исключение: резюме :: Exception в ячейке памяти 0x0019 f6d8

Я не знаю, связана ли проблема с установкой или нет. Я очень новичок в OpenCV и не знаю многого, поэтому, если кто-то, кто хорошо привык к этому, может исправить эту ошибку для меня, а также дать мне объяснение, почему это произошло, и руководство в этом было бы здорово.

Надеюсь, ждем ваших ответов - Джонатан -

+0

Вы установили путь dll opencv в настройках 'path'? –

+0

Вы имеете в виду переменные окружения, да ... я добавил opencv \ build \ x86 \ vc10 \ bin в переменную пути ... но он не работает, пожалуйста, помогите мне –

+0

ok, тогда попробуйте что-нибудь еще, перед обработкой проверка кадра не является «пустым» или «NULL». сохранить блок обработки внутри 'if' и посмотреть, что произошло? –

ответ

3

Попробуйте заменить

cap >> frame; 

с:

while (frame.empty()) { 
    cap >> frame; 
} 

Иногда OpenCV камеры API дает мусор в течение первых нескольких кадров, но после того, как пока все работает.

Вы можете ограничить этот цикл до фиксированного числа итераций, чтобы избежать бесконечного запуска.

+0

Я пробовал то, что вы сказали, но он все еще показывает ошибку, я даже пытался установить предел для цикла for, но не использовать ... –

+0

Эй, спасибо за вашу замечательную поддержку. Но в любом случае я понял это вместо того, чтобы сменить блок «cap >> frame» на оператор while, я разместил код обработки изображения и отображения 'if (! Frame.empty()) { \t \t GaussianBlur (края, ребра, Размер (7,7), 1,5, 1.5); Canny (края, ребра, 0, 30, 3); imshow («края», ребра); if (waitKey (30)> = 0) break; \t \t imshow ("edge", frame); if (waitKey (30)> = 0) break; \t \t} 'внутри оператора if, который выполняется только тогда, когда матрица кадра не пуста –

0

Нижеследующие строки кода используются только для обнаружения края.

cvtColor(frame, edges, CV_BGR2GRAY); 
GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5); 
Canny(edges, edges, 0, 30, 3); 

Итак, если вы заинтересованы в только видео захвата, то используйте следующий код:

#include "opencv2/opencv.hpp" 

using namespace cv; 

int main(int, char**) 
{ 
    VideoCapture cap(0); // open the default camera 
    if(!cap.isOpened()) // check if we succeeded 
     return -1; 

    for(;;) 
    { 
     Mat frame; 
     cap >> frame; // get a new frame from camera 
     imshow("display", frame); 
     if(waitKey(30) >= 0) break; 
    } 
    // the camera will be deinitialized automatically in VideoCapture destructor 
    return 0; 
} 

Для выполнения этого кода, вы должны установить путь к библиотеке в VS, а также вы должны установить dll в опции компоновщика в VS.It будет работать !!!

Смежные вопросы