cv ::发生内存位置错误

时间:2017-02-14 08:32:31

标签: c++ opencv

我有一台yuv相机。

我将yuv转换为bgr(因为opencv使用bgr)但是我得到了一个例外:

  

test1.exe中0x76c1a832处的未处理异常:Microsoft C ++异常:cv ::内存位置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");
}

1 个答案:

答案 0 :(得分:1)

代码似乎是正确的,但您没有检查图像是否真的是从捕获设备中检索到的。您代码中最可能出现的问题是您没有检索图像,而且它是您尝试转换的空Mat(这是不可能的),这会产生错误。

但是,如果您已经在使用C ++,为什么不使用C ++ API?