外部网络摄像头不适用于 Opencv 和 Python

问题描述 投票:0回答:6

我正在使用 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
python opencv webcam
6个回答
2
投票

该断言意味着您的图像没有 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()

1
投票

您确定使用了正确的索引吗?使用

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


0
投票

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
    

0
投票

谢谢它对我有用。

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


0
投票
you can try to install virtual environment
     pip install virtualenv
then
    python -m virtualenv .
then
run you python program with 

    cv2.VideoCapture(0)
© www.soinside.com 2019 - 2024. All rights reserved.