2017-02-14 7 views
2

Ich habe eine Yuv-Kamera.cv :: Ausnahme bei Speicherplatz Fehler

I umwandeln yuv BGR (wegen opencv Verwendung BGR), aber ich erhalte eine Ausnahme:

Unbehandelte Ausnahme bei 0x76c1a832 in test1.exe: Microsoft C++ Ausnahme: cv :: Exception an Speicherplatz 0x00baee60. .

Wie kann ich es beheben?

#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

Tun Sie sich einen Gefallen und verwenden Sie die C++ - API, den betroffenen Code finden Sie unter http://docs.opencv.org/3.0-beta/modules/videoio/doc/reading_and_writing_video.html#videocapture – ZdaR

+0

(1) Verwenden die C++ Schnittstelle; (2) Verwenden Sie einen 'try-catch'-Block, um die Ausnahme abzufangen und das Problem zu erkennen. Es hat eine '.what()' Methode. –

+0

danke. nachdem ich C++ API verwende, verschwindet der Fehler. –

Antwort

1

Der Code scheint korrekt zu sein, aber Sie überprüfen nicht, ob das Bild wirklich vom Aufnahmegerät abgerufen wurde. Das wahrscheinlichste Problem in Ihrem Code ist, dass Sie kein Bild abrufen und es sich um eine leere Matte handelt, die Sie zu konvertieren versuchen (was unmöglich ist), und dies erzeugt den Fehler.

Wenn Sie jedoch bereits C++ verwenden, warum verwenden Sie nicht C++ API?

+0

danke. nachdem ich C++ API verwende, verschwindet der Fehler. –

+0

Ich habe dich bereits gewählt. aber die Stimme des Fragestellers wird nicht angezeigt (stackoverflow hat mich bemerkt) –