OpenCV调用摄像头报错:cap_msmf.cpp (928) CvCapture_MSMF::initStream Failed to set mediaType (stream 0, (640x

博客介绍了在win7系统、Python3.7、OpenCV4.5.2环境下,摄像头操作代码报错的解决办法。涉及摄像头index操作时,应加上cv2.CAP_DSHOW。还介绍了VideoCapture和open函数,以及摄像头下标index查看方法和不同数量摄像头的Index设置。
该文章已生成可运行项目,

环境:

        win7、Python3.7、OpenCV4.5.2、笔记本电脑

报错内容:

[ WARN:0@0.911] global D:\a\opencv-python\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (928) CvCapture_MSMF::initStream Failed to set mediaType (stream 0, (640x480 @ 30) MFVideoFormat_RGB24(unsupported media type)
[ WARN:0@0.948] global D:\a\opencv-python\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (928) CvCapture_MSMF::initStream Failed to set mediaType (stream 0, (640x480 @ 30) MFVideoFormat_RGB24(unsupported media type)
出错啦!

代码报错定位位置:

# 获取摄像头
cap = cv2.VideoCapture(0)
# 打开cap
cap.open(0)

解决办法:

# 获取摄像头
cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
# 打开cap
cap.open(0,cv2.CAP_DSHOW)

涉及到摄像头index 的操作,都应加上cv2.CAP_DSHOW

VideoCapture函数:

        创建从视频文件或摄像头中捕获视频的对象

open函数:

        从摄像头获取视频流

函数原型:    

(VideoCapture).open(index)
  • 默认笔记本/台式机若只有一个0摄像头,Index=0; 如果有2个,一般Index为0和1,根据具体情况区分,摄像头接入和断开会改变Index值

  • 接入2个以上,但只想用指定的一个,可以在设备管理器中禁用其他,同时Index设置为0

摄像头下标index查看方法:

转自blog.youkuaiyun.com/ltl451011/article/details/123462206

import cv2
ID = 0
while(1):
    cap = cv2.VideoCapture(ID,cv2.CAP_DSHOW)
    # get a frame
    ret, frame = cap.read()
    if ret == False:
        ID += 1
    else:
        print(ID)
    break

本文章已经生成可运行项目
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值