运行代码时,我看不到任何输出视频窗口。 Python代码:
in_common | count
-----------+-------
2 | 2
3 | 1
4 | 1
(3 rows)
当我运行它时,我得到import cv2
import numpy as np
#cap = cv2.VideoCapture(0)
cap = cv2.VideoCapture('C:\Users\khan1\Desktop\pythonproject\test_1.avi')
print cap
while (cap.isOpened()):
_, frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower_green = np.array([65, 60, 60])
upper_green = np.array([80, 255, 255])
mask = cv2.inRange(hsv, lower_green, upper_green)
res = cv2.bitwise_and(frame, frame, mask=mask)
cv2.imshow('frame', frame)
cv2.imshow('mask', mask)
cv2.imshow('res', res)
k = cv2.waitKey(1) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
cap.release()
但它没有显示任何视频。如果我使用Process finished with exit code 0
进行网络摄像头,此代码可正常显示3个不同的视频窗口。 cap = cv2.VideoCapture(0)
也显示print cap
。我做错了什么?
答案 0 :(得分:0)
让我们回顾一下提供的代码,因为这个输出应该是预期的。
此行正在激活您的主网络摄像头。如果您只有一个网络摄像头插入您的机器,那么这应该没问题。
cap = cv2.VideoCapture(0)
接下来,循环只是捕捉网络摄像头的帧,直到您按Escape键。您正在使用三个窗口,因为您正在运行三次imshow函数:
cv2.imshow('frame', frame)
cv2.imshow('mask', mask)
cv2.imshow('res', res)
frame
变量通过网络摄像头存储正常帧而不进行修改。 mask
变量根据提供的值范围运行颜色阈值,在这种情况下,该范围是lower_green
和upper_green
之间的范围。 res
变量将在正常帧的顶部显示掩码,从而显示bitwise_and运算符。
请注意,opencv的默认颜色格式是BGR(蓝色,绿色,红色),并且您将其转换为HSV值,这就是为什么您可能会获得两个黑屏。
更改颜色阈值中的值,直到获得更好的结果或尝试使用此代码来掩盖任何非远程绿色的代码。
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
#cap = cv2.VideoCapture('C:\Users\khan1\Desktop\pythonproject\test_1.avi')
print cap
while (cap.isOpened()):
_, frame = cap.read()
rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
lower_green = np.array([0, 60, 0])
upper_green = np.array([200, 255, 200])
mask = cv2.inRange(rgb, lower_green, upper_green)
res = cv2.bitwise_and(frame, frame, mask=mask)
cv2.imshow('frame', frame)
cv2.imshow('mask', mask)
cv2.imshow('res', res)
k = cv2.waitKey(1) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
cap.release()
您会注意到,在我提供的代码中,我将其转换为RGB格式而不是HSV。
答案 1 :(得分:0)
对于我的32位Windows 10笔记本电脑,我将opencv_ffmpeg320.dll
从C:\OpenCV-3.2.0\opencv\build\bin
复制到C:\Python27
,这解决了问题。 OpenCV 2.4 VideoCapture not working on Windows是我遵循的链接。