2017-02-14 1 views
2

У меня есть камера yuv.cv :: Исключение при ошибке памяти ошибка

преобразовать YUV в BGR (из-за использования OpenCV BGR), но я получаю исключение:

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

Как это исправить?

#include <opencv/cv.h> 
#include <opencv/highgui.h> 
#include <opencv2/opencv.hpp> 

void main() 
{ 
    IplImage* image ; 
    CvCapture* capture=cvCaptureFromCAM(CV_CAP_ANY); 

    //cv::Mat input; 
    cv::Mat output; 

    cvNamedWindow("webcam",1); 

    cvGrabFrame(capture); 

    image = cvRetrieveFrame(capture); 

    cv::Mat input = cv::cvarrToMat(image); 

    cv::cvtColor(input,output,CV_YUV2BGR_YUY2); 

    imshow("webcam", output); 


    /* 
    while(1) 
    { 
     //get image from Camera 
     image = cvQueryFrame(capture); 

     //Iplimage to Mat 
     cv::Mat input = cv::cvarrToMat(image); 

     //YUV to RGB, CV_YUV2RGB_NV12 CV_YUV2BGR_NV12 CV_YUV2RGB_YV12 CV_YUV2BGR_YV12 CV_YUV2RGB_IYUV CV_YUV2BGR_IYUV CV_YUV2RGB_UYVY CV_YUV2BGR_UYVY 
     cv::cvtColor(input,output,CV_YUV2BGR_YUY2); 

     // Draw image 
     //cvShowImage("webcam", image); 
     imshow("webcam", output); 


     //key = cvWaitKey(30); 
     if(cvWaitKey(33)>=27) 
      break; 
    } 
    */ 

    cvReleaseCapture(&capture); 
    cvDestroyWindow("webcam"); 
} 
+2

Сделайте себе одолжение и используйте C++ API, соответствующий код можно найти по адресу http://docs.opencv.org/3.0-beta/modules/videoio/doc/reading_and_writing_video.html#videocapture – ZdaR

+0

(1) Использовать интерфейс C++; (2) Используйте блок 'try-catch', чтобы поймать исключение и посмотреть, в чем проблема. Он имеет метод '.what()'. –

+0

спасибо. после использования API C++ ошибка исчезает. –

ответ

1

Код представляется правильным, но вы не проверяете, действительно ли изображение было извлечено с устройства захвата. Наиболее вероятной проблемой в вашем коде является то, что вы не получаете изображение, и это пустой Mat, который вы пытаетесь преобразовать (что невозможно), и это вызывает ошибку.

Однако, если вы уже используете C++, почему бы вам не использовать C++ API?

+0

спасибо. после использования API C++ ошибка исчезает. –

+0

Я уже голосовал за вас. но голосование опроса не отображается (stackoverflow заметил меня) –