python opencv在使用第三方摄像机时无法显示视频

python opencv在使用第三方摄像机时无法显示视频,python,opencv,camera,Python,Opencv,Camera,我已经写了下面的代码来读取摄像机中的视频并进行显示和保存 当我在VideoCapture(0)中使用选项0运行下面的代码时,它工作正常并显示我的网络摄像头视频,当我在VideoCapture(1)中将其更改为1以从第三方摄像头获取视频时,我得到错误 我使用的是第三方摄像机,用他们的软件播放视频,我需要用我的python代码拍摄 对于qt示例,它也会播放视频 我无法使用下面的python代码进行游戏 import cv2 import numpy as np import time def not

我已经写了下面的代码来读取摄像机中的视频并进行显示和保存

当我在VideoCapture(0)中使用选项0运行下面的代码时,它工作正常并显示我的网络摄像头视频,当我在VideoCapture(1)中将其更改为1以从第三方摄像头获取视频时,我得到错误

我使用的是第三方摄像机,用他们的软件播放视频,我需要用我的python代码拍摄

对于qt示例,它也会播放视频

我无法使用下面的python代码进行游戏

import cv2
import numpy as np
import time
def nothing(x):
    pass

cv2.namedWindow('images')
switch = 'Recording'
cv2.createTrackbar(switch, 'images',0,1,nothing)
cap = cv2.VideoCapture(0)

def writeVideo(frmae):
    pass

switchstatus = 0

currentpos = 0
fourccs = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter('sample.avi', fourccs, 20.0, (640,480))
created = 0
startrecord = 0



def RecordVideo(frame):
    global out
    global created;
    global startrecord
    print "In the Record video" ,created, startrecord
    if created == 0 and startrecord ==1:
        filename ='test.avi'
        filename=time.strftime("%Y-%m-%d-%H-%M-%S")+'.avi'
        print "filename", filename
        out = cv2.VideoWriter(filename,fourccs, 20.0, (640,480))
        created = 1;
        out.write(frame)
    elif created == 1 and startrecord ==1:
        out.write(frame)


def positionChanged(s):
    global currentpos
    global created
    global startrecord

    print "position changed", s
    currentpos = s
    if s==1:
        startrecord = 1
        created = 0
    else:
        startrecord = 0
    if created==1:
        created =0
        out.release()




def switchchanged(s):
    global switchstatus;
    if switchstatus != s:
        switchstatus = s
        positionChanged(s)



while(1):
    ret, frame = cap.read()
        RecordVideo(frame)
    cv2.imshow('images',frame)

    s = cv2.getTrackbarPos(switch,'images')

    switchchanged(s)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        out.release()
        cv2.destroyAllWindows()
        break
错误

文件“C:\Python32Bit\video.py,lime 89,在cv2.imshow('images',frame)中


eror:…\opencv\modules\hihggui\src\window.cpp:错误:(-215)在函数cv::imshow中的size.width>0&&size.height>0我通过从windows硬件设置菜单禁用内置网络摄像头实现了这一点。我在朋友的计算机上执行了此操作,因此我现在无法访问它,但请签出。我相信windows不会让openCV使用除第0台以外的任何其他视频捕获设备,因此您必须制作任何摄像机a您想使用硬件列表中的第一个

cap = cv2.VideoCapture(0+cv2.CAP_DSHOW)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)

它确实解决了我的问题。

在Linux系统上
VideoCapture
默认情况下使用
libv4l2
作为视频输入设备。安装
v4l utils
并执行
v4l2 ctl--all
。查看它是否显示您的摄像头。我正在windows for windows上尝试,它很可能使用
DShow
。使用您的显示摄像头运行
 cap=cv2.VideoCapture(0+cv2.cap_DSHOW)
,如果它工作,那么它使用的是
DSHOW
。0+cv2.cap_DSHOW适用于我的网络摄像头,而1+cv2.cap_DSHOW给出的是相同的错误。出于测试目的,我交叉检查了,该摄像头的驱动程序“aptina m031”已经安装好,让我们再试一次。
cap=cv2.VideoCapture(0+cv2.CAP_FFMPEG)
。顺便问一下,您是从源代码还是OpenCV_python绑定安装OpenCV的?您好,我禁用了默认摄像头,但仍然存在相同的问题,我注意到“成像设备”下只有摄像头。我的第三方摄像头作为“aptina演示”放在“通用串行总线控制器”下,那么这有什么关系吗?你为相机安装了windows驱动程序吗?是的,只有在“通用串行总线控制器”下检测到它是aptina demo我不确定,我知道windows有一个很好的功能,第一次安装驱动程序时不工作,所以你必须重新安装驱动程序。所以你可以尝试重新安装它们。也许可以做一些经典的windows