【问题标题】:External Webcam not working for Opencv and Python外部网络摄像头不适用于 Opencv 和 Python
【发布时间】:2014-01-22 17:32:04
【问题描述】:

我正在使用 Python cv2 模块来运行程序。

我可以访问内置网络摄像头,但是当我使用外部网络摄像头时,它不起作用。

我用过所有的代码,比如

VideoCapture(1) # or any other no.s like 0,1,2,3 etc etc.

我什至使用设备管理器禁用了内置网络摄像头。

但没有任何效果。我正在使用pythonxy。我也试过在命令提示符下。还是不行。

我收到以下错误

runfile('C:/Users/Prashant/Documents/Python Scripts/Circledetection.py',     wdir=r'C:/Users/Prashant/Documents/Python Scripts')
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in unknown function, file ..\..\..\modules\imgproc\src\color.cpp, line 3402
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 540, in runfile
    execfile(filename, namespace)
  File "C:/Users/Prashant/Documents/Python Scripts/Circledetection.py", line 27, in <module>
    prev_gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
cv2.error: ..\..\..\modules\imgproc\src\color.cpp:3402: error: (-215) scn == 3 || scn == 4

【问题讨论】:

  • 错误只是指出,您的图像是空的(因为未打开捕获。)尝试为您的外部网络摄像头安装适当的驱动程序。
  • 我可以使用 win8 相机应用程序中的网络摄像头 .. 当我从设备管理器检查更新驱动程序时,它显示“Windows 已确定您设备的驱动程序软件是最新的” .

标签: python opencv webcam


【解决方案1】:

该断言意味着您的图像没有 3 个(RGB、BGR 等)通道或 4 个通道(3 个通道 + alpha)。显然,这可能是由根本不存在的图像引起的。

虽然这可能是因为您的相机不工作,但同样可能是您的相机在前几次 read() 中没有提供可用帧,因为它仍在“准备”自己。

解决这个问题的最简单方法,假设你使用类似的东西 retv, frame = cam.read() 是检查if frame:if retv:

如果没有图像,让它跳过你的处理,在几帧内你应该有可读的输入。

【讨论】:

    【解决方案2】:

    你提到了VideoCapture(0)VideoCapture(1)
    “1”表示外接摄像头编号。

    import cv2
    import numpy as np
    
    cap = cv2.VideoCapture(1) 
    while(1):
        ret, frame = cap.read()
        #print(height)
        #cv2.imshow("Cropped Image", crop_img)
        #gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        cv2.imshow('frame',frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    cap.release()
    cv2.destroyAllWindows()
    

    【讨论】:

      【解决方案3】:

      您确定您使用的是正确的索引吗?使用Videocapture您也可以尝试使用Videocapture(-1),因为外部凸轮有时会作为输入列表中的最后一个元素出现。 Videocapture 也可以返回设备名称,因此您可以尝试遍历输入设备索引列表并打印它们的“友好名称”,以确保您使用的是正确的。

      【讨论】:

        【解决方案4】:

        OpenCV 需要以下依赖项才能使用 USB 摄像头。从以下命令安装依赖项:

        • libav 视频输入/输出开发库

          sudo apt-get install libavformat-dev libavutil-dev libswscale-dev
          
        • Video4Linux 摄像头开发库

          sudo apt-get install libv4l-dev
          
        • OpenGL 开发库(允许创建图形窗口)

          sudo apt-get install libglew-dev
          
        • GTK 开发库(允许创建图形窗口)

          sudo apt-get install libgtk2.0-dev
          

        【讨论】:

          【解决方案5】:

          谢谢它对我有用。

          OpenCV 需要以下依赖项才能使用 USB 摄像头。从以下命令安装依赖项:

          libav 视频输入/输出开发库

          sudo apt-get install libavformat-dev libavutil-dev libswscale-dev Video4Linux 摄像头开发库

          sudo apt-get install libv4l-dev OpenGL 开发库(允许创建图形窗口)

          sudo apt-get install libglew-dev GTK 开发库(允许创建图形窗口)

          sudo apt-get install libgtk2.0-dev

          【讨论】:

            猜你喜欢
            • 2018-03-24
            • 1970-01-01
            • 2012-06-16
            • 2016-03-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-06-07
            相关资源
            最近更新 更多