OpenCV 找不到我的 USB 网络摄像头

Posted

技术标签:

【中文标题】OpenCV 找不到我的 USB 网络摄像头【英文标题】:OpenCV can't find my USB webcam 【发布时间】:2011-12-21 14:06:53 【问题描述】:

我正在尝试在我的 MacBook 上创建一个带有内置 iSight 摄像头的 OpenCV 应用程序。我从互联网上抓取了一些非常简单的代码,并顺利运行它。 OpenCV 自动发现了内置网络摄像头并正常运行,但我无法让它与我的 USB 网络摄像头一起工作。

#include <stdio.h>
#include <opencv.hpp>

int main( int argc, char **argv )

    CvCapture *capture = 0;
    IplImage  *frame = 0;
    int       key = 0;

    /* initialize camera */
    capture = cvCaptureFromCAM(0);

    /* always check */
    if ( !capture ) 
        fprintf( stderr, "Cannot open initialize webcam!\n" );
        return 1;
    

    /* create a window for the video */
    cvNamedWindow( "Test", CV_WINDOW_AUTOSIZE );

    while( key != 'q' ) 
        /* get a frame */
        frame = cvQueryFrame( capture );

        /* always check */
        if( !frame ) break;

        /* display current frame */
        cvShowImage( "Test", frame );

        /* exit if user press 'q' */
        key = cvWaitKey( 1 );
    

    /* free memory */
    cvDestroyWindow( "Test" );
    cvReleaseCapture( &capture );

    return 0;

我编译了这个:

g++ webcam.c -o webcam -I/opt/local/include/opencv2 -I/opt/local/include -L/opt/local/lib -lopencv_core -lopencv_highgui

根据文档,将capture = cvCaptureFromCAM(0); 行更改为 capture = cvCaptureFromCAM(1);我应该能够访问我已插入的另一个网络摄像头,但运行程序会给我错误消息:Warning: Max Camera Num is 0; Using camera 0

我可以采取哪些步骤让 OpenCV 识别我有另一个相机连接到我的 USB 驱动器?

【问题讨论】:

其他应用可以看到您的网络摄像头吗?抱歉,我不知道如何在 OSX 上发现网络摄像头的详细信息,但您所做的通常是正确的 我从webcam-osx.sourceforge.net 获得了应用程序 macam,它可以使用该设备,但它具有用 Objective-C 编写的相机软件驱动程序。我需要编写自己的相机驱动程序吗? openCV使用系统的摄像头接口(直接在window上显示,在OSX上不知道),试试看这里:tech.groups.yahoo.com/group/OpenCV/messages 【参考方案1】:

这是基于 Windows 经验,但我相信主要问题是相同的。 (从我笔记本电脑上的罗技 USB 摄像头获取输入。)

据我所知; OpenCV 不支持多个摄像头,因此不支持摄像头的选择。 我猜您可以使用您显示的代码轻松运行内置相机。 我对类似问题的解决方案是停用内置摄像头。为您的 cvCaptureFromCAM(0) 函数提供唯一的“可用”插槽。

我希望这可以解决您的问题,即使解决方案有点“笨拙”。

【讨论】:

以上是关于OpenCV 找不到我的 USB 网络摄像头的主要内容,如果未能解决你的问题,请参考以下文章

通过 USB 编程访问多个网络摄像头

openCV上的USB相机选择

opencv如何打开usb摄像头

通过网络摄像头实时采集视频,采用OpenCV识别运动物体,实现有运动物体经过时存储,没有时则不存储.

opencv如何选择摄像头

从 webrtc 将网络摄像头帧传递给 python opencv