C++ Opencv:cvGetMat中的空指针(传递空数组指针)
我在尝试使用opencv从网络摄像头捕获视频时遇到此错误。这是我正在使用的代码:C++ Opencv:cvGetMat中的空指针(传递空数组指针),c++,opencv,C++,Opencv,我在尝试使用opencv从网络摄像头捕获视频时遇到此错误。这是我正在使用的代码: #include "opencv2/opencv.hpp" using namespace cv; using namespace std; int main( int argc, const char** argv ) { CvCapture *capture = cvCaptureFromCAM(0); IplImage *frame; cvNamedWindow("test");
#include "opencv2/opencv.hpp"
using namespace cv;
using namespace std;
int main( int argc, const char** argv ) {
CvCapture *capture = cvCaptureFromCAM(0);
IplImage *frame;
cvNamedWindow("test");
while ( 1)
{
frame = cvQueryFrame(capture) ;
cvShowImage("test", frame);
int key = cvWaitKey(1);
if ( key == 27 ) break; // ESC key was pressed
}
// Memory deallocation
cvReleaseCapture(&capture);
cvDestroyWindow("test");
return 0;
}
错误发生在cvShowImage(“文本”,帧):
OpenCV错误:cvGetMat中的空指针(传递了空数组指针),
文件
/opt/local/var/macports/build/_opt\u mports\u dports\u graphics\u opencv/opencv/work/opencv-2.4.6.1/modules/core/src/array.cpp,
第2382行libc++abi.dylib:terminate调用引发异常
(lldb)
它的错误是什么?我如何修复它 首先,您应该检查索引0处是否有设备,如下所示
if (!capture)
{
// print error and exit
cout << "ERROR: Capture is null!\n";
return -1;
}
希望这有帮助此代码应该可以正常工作。你确定运行相机时正在访问它吗?你运行相机时抛出了调试器并确保帧和捕获不为空吗?我仍在研究opencv。此代码仅供学习之用,我认为摄像头(网络摄像头)应该可以访问!以前,我检查了一下,不知道为什么帧总是空的是的,我检查了一下,发现帧总是空的。您认为opencv安装可能有问题吗?我在mac os 10.8上使用opencv2.4.6,您可以使用上面的代码检查捕获是否为空。也许您应该忽略
cvQueryFrame
中的第一帧,因为捕获不是空的。我怎么能忽略第一个帧呢?只是把frame=cvQueryFrame(capture)
放在之前,而仍然有同样的问题=(
while ( capture)
{
frame = cvQueryFrame(capture) ;
cvShowImage("test", frame);
int key = cvWaitKey(1);
if ( key == 27 ) break; // ESC key was pressed
}