OpenCV CvCapture_MSMF::grabFrame videoio(MSMF):无法抓取帧。错误:-2147483638

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

下面是我的隐形斗篷代码,我收到此错误

`anonymous-namespace'::SourceReaderCB::OnReadSample videoio(MSMF):调用 OnReadSample() 时出现错误状态:-1072875772 以及 CvCapture_MSMF::grabFrame videoio(MSMF):无法抓取帧。错误:-2147483638

任何人都可以帮我解决这个代码吗?

import numpy as np
import cv2

import time #for camera setup time

videoCap = cv2.VideoCapture(0) #capture the video from 1st webcam

time.sleep(3) #2 sec for the camera to setup 

background = 0 #background that I have to display when I have the cloth on myself

for i in range(60): #30 iteration to capture the background
    ret, background = videoCap.read()

while(videoCap.isOpened()):
    ret, img = videoCap.read()

    if not ret:
        break

    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

    lower_red = np.array([0, 120, 70])
    upper_red = np.array([10, 255, 255])
    mask1 = cv2.inRange(hsv, lower_red, upper_red) #seperating/segmenting the cloak part

    lower_red = np.array([170, 120, 70])
    upper_red = np.array([180, 255, 255])
    mask2 = cv2.inRange(hsv, lower_red, upper_red)

    mask1 = mask1 + mask2 # 1 or 2 i.e any shade of red between mask1 and mask2 then we need to segment that part

    mask1 = cv2.morphologyEx(mask1, cv2.MORPH_OPEN, np.ones((3,3), np.uint8), iterations=2) #noise Removal
    mask1 = cv2.morphologyEx(mask1, cv2.MORPH_DILATE, np.ones((3,3), np.uint8), iterations=1)

    mask2 = cv2.bitwise_not(mask1) # mask2 == everything except the cloak

    res1 = cv2.bitwise_and(background, background, mask=mask1) #Used for segmentation of the color
    res2 = cv2.bitwise_and(img, img, mask=mask2) #used to substitute the cloak part
    final_output = cv2.addWeighted(res1, 1, res2, 1, 0) #superimposing 2 images

    cv2.imshow('We did it !!', final_output)
    k = cv2.waitKey(10)
    if k == 27:
        break

    videoCap.release()
    cv2.destroyAllWindows()
python-3.x opencv video-capture ms-media-foundation
3个回答
1
投票

这里捕获的问题是 Microsoft Media Foundation API 的

MF_E_HW_MFT_FAILED_START_STREAMING
:

硬件设备无法开始流式传输。此错误代码可以由代表硬件设备(例如相机)的媒体源返回。例如,如果相机已被其他应用程序使用,该方法可能会返回此错误代码。

换句话说,这意味着相机设备出现故障,API 无法开始读取视频帧。然后这个低级错误会通过 OpenCV 转发给您。


1
投票

老问题,但我在 2023 年也有过类似的问题。MSMF 是罪魁祸首,不知道为什么,但除了 OpenCV 之外,所有其他工具都工作正常 我的解决方案是使用 DSHOW 打开

  cap = cv2.VideoCapture(cv2.CAP_DSHOW)

0
投票

要检查某个后端是否存在问题,只需使用下面的后端变体即可,

   backends = [cv2.CAP_DSHOW, cv2.CAP_MSMF, cv2.CAP_VFW]

© www.soinside.com 2019 - 2024. All rights reserved.