下面是我的隐形斗篷代码,我收到此错误
`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()
这里捕获的问题是 Microsoft Media Foundation API 的
MF_E_HW_MFT_FAILED_START_STREAMING
:
硬件设备无法开始流式传输。此错误代码可以由代表硬件设备(例如相机)的媒体源返回。例如,如果相机已被其他应用程序使用,该方法可能会返回此错误代码。
换句话说,这意味着相机设备出现故障,API 无法开始读取视频帧。然后这个低级错误会通过 OpenCV 转发给您。
老问题,但我在 2023 年也有过类似的问题。MSMF 是罪魁祸首,不知道为什么,但除了 OpenCV 之外,所有其他工具都工作正常 我的解决方案是使用 DSHOW 打开
cap = cv2.VideoCapture(cv2.CAP_DSHOW)
要检查某个后端是否存在问题,只需使用下面的后端变体即可,
backends = [cv2.CAP_DSHOW, cv2.CAP_MSMF, cv2.CAP_VFW]