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无法从isight网络摄像头捕获图像_C++_Opencv - Fatal编程技术网

C++ OpenCV无法从isight网络摄像头捕获图像

C++ OpenCV无法从isight网络摄像头捕获图像,c++,opencv,C++,Opencv,我无法使用以下OpenCV代码从我的网络摄像头捕获图像 该代码可以显示来自本地AVI文件或视频设备的图像。它在“test.avi”文件上运行良好 当我使用默认网络摄像头(CvCapture*capture=cvCreateCameraCapture(0))时,程序可以从网络摄像头中检测图像的大小,但无法显示图像 /我忘了提到我可以看到iSight正在工作,因为LED指示灯已打开/ 有人遇到同样的问题吗 cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE )

我无法使用以下OpenCV代码从我的网络摄像头捕获图像

该代码可以显示来自本地AVI文件或视频设备的图像。它在“test.avi”文件上运行良好

当我使用默认网络摄像头(CvCapture*capture=cvCreateCameraCapture(0))时,程序可以从网络摄像头中检测图像的大小,但无法显示图像

/我忘了提到我可以看到iSight正在工作,因为LED指示灯已打开/

有人遇到同样的问题吗

cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE );

CvCapture* capture =cvCreateFileCapture( "C:\\test.avi" ) ;// display images from avi file, works well 
// CvCapture* capture =cvCreateCameraCapture(0); //display the frame(images) from default webcam not work 

assert( capture );
IplImage* image;

while(1) {
 image = cvQueryFrame( capture );
   if( !image ) break;

  cvShowImage( "Example2", image );

  char c = cvWaitKey(33);
  if( c == 27 ) break;
}

cvReleaseCapture( &capture );
cvDestroyWindow( "Example2" );
  • opencv 2.2
  • 调试库*d.lib
  • 网络摄像头isight
  • Macbook操作系统win7 32
  • VS2008

您是否尝试了来自

#include "cv.h"
#include "highgui.h"

using namespace cv;

int main(int, char**)
{
    VideoCapture cap(0); // open the default camera
    if(!cap.isOpened())  // check if we succeeded
        return -1;

    Mat edges;
    namedWindow("edges",1);
    for(;;)
    {
        Mat frame;
        cap >> frame; // get a new frame from camera
        cvtColor(frame, edges, CV_BGR2GRAY);
        GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
        Canny(edges, edges, 0, 30, 3);
        imshow("edges", edges);
        if(waitKey(30) >= 0) break;
    }
    // the camera will be deinitialized automatically in VideoCapture destructor
    return 0;
}
在MacBookPro上为我工作(尽管是在OSX上)。如果它不起作用,某种类型的错误消息会很有帮助。

为什么不试试呢

capture=cvCaptureFromCam(0);
我想这可能行得通


让我知道它是否工作。

最新更新!问题解决了

这恰好是OpenCV 2.2的缺陷之一

以下是如何修复它:


我正在用Macbook pro于2012年年中开发opencv 2.3,我在Isight cam上遇到了这个问题。通过简单地调整Cvcapture的参数并调整帧的宽度和高度,我设法使其在opencv上工作:

CvCapture* capture = cvCaptureFromCAM(0);
cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH, 500 );
cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT, 600 );
您还可以将这些数字更改为所需的帧宽度和高度。

尝试以下操作:

int main(int, char**) {
    VideoCapture cap(0); // open the default camera
    if (!cap.isOpened()) {  // check if we succeeded
        cout << "===couldn't open camera" << endl;
        return -1;
    }
    Mat edges, frame;
    frame = cv::Mat(10, 10, CV_8U);
    namedWindow("edges", 1);
    for (;;) {
        cap >> frame; // get a new frame from camera
        cout << "frame size: " << frame.cols << endl;
        if (frame.cols > 0 && frame.rows > 0) {
            imshow("edges", frame);
        }
        if (waitKey(30) >= 0)
            break;
    }
    // the camera will be deinitialized automatically in VideoCapture destructor
    return 0;
}
int main(int,char**){
VideoCapture cap(0);//打开默认摄像机
如果(!cap.isOpened()){//检查我们是否成功
cout-frame;//从摄影机获取新帧
cout=0)
打破
}
//摄像机将在VideoCapture析构函数中自动解除初始化
返回0;
}

谢谢您的回复。问题尚未解决。当我检查“框架”时,行和CLO是正确的(480*640)。我不确定这个“框架”应该是什么样子。我有这个框架的屏幕截图,你可以在这里找到它。图3网络摄像头是否与其他程序一起工作?可能只是驱动程序问题。最新更新!问题解决了!这恰好是OpenCV 2.2的一个错误,这里是如何修复它:^]我觉得这是一个错误或驱动程序的问题,我有完全相同的问题和几乎相同的设置(win7 64)。我尝试过在有qt支持和没有qt支持的情况下构建opencv,但都没有效果。