C ++ OpenCV无法在另一台笔记本电脑上打开网络摄像头但能够在桌面上打开

时间:2017-08-26 23:38:35

标签: c++ visual-studio opencv webcam

我的程序使用OpenCV库从网络摄像头捕获单个图像,然后将其保存到本地文件系统中。

目前它在我的桌面上工作正常;我的程序开发的地方。但是当我在笔记本电脑(不同设备)上测试时,它无法检测到网络摄像头。

我继续在另一台笔记本电脑上测试它,但仍然出现同样的问题。 当我执行程序时,笔记本电脑的两个网络摄像头都没有被使用,而且两台笔记本电脑只有一个集成的网络摄像头。

  

以下是设备的规格和OpenCV的CMake选项。

     
      
  • 桌面      
        
    1. Windows 10 64位
    2.   
    3. 通过USB连接的外部网络摄像头
    4.   
    5. 网络摄像头存在于“设备管理器”
    6. 中   
    7. 网络摄像头存在于设备和打印机
    8. 中   
  •   
  • 笔记本电脑1      
        
    1. Windows 10 64位
    2.   
    3. 板载网络摄像头(集成)
    4.   
    5. 网络摄像头存在于“设备管理器”
    6. 中   
    7. 网络摄像头存在于设备和打印机
    8. 中   
    9. 能够在笔记本电脑的“相机”应用上访问网络摄像头
    10.   
  •   
  • 笔记本电脑2      
        
    1. Windows 10 64位
    2.   
    3. 板载网络摄像头(集成)
    4.   
    5. 网络摄像头存在于“设备管理器”
    6. 中   
    7. 设备和打印机中不存在网络摄像头
    8.   
    9. 能够在笔记本电脑的“相机”应用上访问网络摄像头
    10.   
  •   
  • OpenCV CMake      
        
    1. V3.30
    2.   
    3. BUILD_SHARED_LIBS OFF(静态图书馆)
    4.   
    5. WITH_MSMF ON(媒体基金会支持)
    6.   
    7. WITH_DSHOW OFF(试过,不起作用,读到它已经过时了)
    8.   
    9. BUILD_opencv_world ON
    10.   
  •   

以下显示的是我的代码:

计划标题

#include <opencv2/opencv.hpp>

void GetDevID();
void OpenDevice(int);

cv::Mat frame;

主要

int main()
{
    // Initially I tried cv::VideoCapture cap.open(0) for default webcam.
    // Unfortunately it only works on my desktop, so I tried opening
    // from -1 to 254, hence GetDevID(). Still does not work.
    GetDevID();
}

GetDevID - 获取第一个打开的设备

void GetDevID()
{
    int MaxTested = 254;
    int DevID = -2;
    for (int i = -1; i < MaxTested; i++)
    {
        cv::VideoCapture TestDev(i);
        bool IsDevOpen = TestDev.isOpened();
        TestDev.release();
        if (IsDevOpen)
        {
            DevID = i;
            break;
        }
    }
    OpenDevice(DevID);
}

OpenDevice - 打开经过测试的设备

void OpenDevice(int DevID)
{
    cv::VideoCapture cap;
    cap.open(DevID);
    if (!cap.isOpen())
    {
        // This is where it fails when the program is executed on the laptop
        // Which means the ID from -1 to 254 is not valid
    }
    else
    {
        // Capture 20th frame, for best clarity
        for (int i = 0; i < 20; i++)
        {
            cap.read(frame);
        }
        cap.release();

        if (frame.empty())
        {
            // Error handling occurs here
        }
        else
        {
            // Continues to save file
        }
    }
}

我在Google上运气不好,看起来OpenCV相关问题非常独特。

因此,如果有人能够建议我,我将非常感激。

如果我错过了关于这个问题的任何内容,请告诉我。

修改

正如DaveS所提到的,似乎我可能错过了一些事情。

该程序在台式机和笔记本电脑上运行良好,只是当它在笔记本电脑上运行时,它没有检测到任何网络摄像头设备,也没有丢失任何错误代码。

对于该程序,就好像没有连接的网络摄像头设备,但实际上有。

我还通过连接笔记本电脑上的外部网络摄像头进行了测试,程序仍无法找到任何网络摄像头设备。

0 个答案:

没有答案