我似乎无法弄清楚为什么我要返回一个NumPy数组,其值为0而不是实际数字。当程序执行时,它返回True,因此我知道python能够读取VideoCapture对象。
我做错什么了吗?
import cv2,time
video = cv2.VideoCapture(0)
check, frame = video.read()
print(check)
print(frame)
time.sleep(3)
video.release()
我也收到消息[ WARN:0] terminating async callback
,但不确定为什么收到此消息。
我在执行程序时的输出如下所示。
True
[[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]
...
[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]]
更新后的代码(仍然存在问题)
import cv2,time
import numpy as np
video = cv2.VideoCapture(0)
print('video.isOpened() =', video.isOpened())
check, frame = video.read()
np.set_printoptions(threshold='inf')
print(check)
print(frame)
time.sleep(3)
video.release()
答案 0 :(得分:1)
我将0
中的video = cv2.VideoCapture(0)
替换为计算机中的本地视频文件,并且您的代码能够读取视频并输出有意义的numpy
数组。
因此,我认为您的python
代码很好。
0
中的VideoCapture
通常是指计算机上的默认摄像机,可以是笔记本电脑上的内置网络摄像机,也可以是通过例如插入的外部摄像机。 USB。您能检查一下它是否正常运行吗?
您可以添加
print 'video.isOpened() =', video.isOpened()
在该行之后创建视频,以查看其是否已成功打开。
通过使用{p>设置numpy
的打印选项来打印每个像素值也将很有帮助。
numpy.set_printoptions(threshold='inf')
以便您可以检查一下是不是全为零,或者大部分都是零而未显示非零值,如果相机的保护盖未打开,则可能是这种情况。
示例代码可帮助您进行调试:
import cv2,time
import numpy
import sys
numpy.set_printoptions(threshold=sys.maxsize)
video = cv2.VideoCapture("/home/.../opencv-3.1.0/samples/data/768x576.avi")
print 'video.isOpened() =', video.isOpened()
check = True
count = 0
while check and count < 100:
check, frame = video.read()
cv2.imshow('frame', frame)
count += 1
cv2.waitKey(10)
cv2.destroyAllWindows()
cv2.imwrite('frame.png', frame)
print(check)
print(frame)
time.sleep(3)
video.release()