Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Opencv:cvGetMat中的空指针(传递空数组指针)_C++_Opencv - Fatal编程技术网

C++ Opencv:cvGetMat中的空指针(传递空数组指针)

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");

我在尝试使用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");

    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
}