我有一个 yuv 相机。
我将 yuv 转换为 bgr(因为 opencv 使用 bgr),但出现异常:
Unhandled exception at 0x76c1a832 in test1.exe: Microsoft C++ exception: cv::Exception at memory location 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");
}
最佳答案
代码似乎是正确的,但您没有检查图像是否确实是从捕获设备检索的。您的代码中最可能出现的问题是您没有检索图像,并且您正在尝试转换它是一个空的 Mat(这是不可能的),这会产生错误。
但是,如果您已经在使用 C++,为什么不使用 C++ API 呢?
关于c++ - cv::内存位置异常发生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42221213/