OpenCV VideoCapture问题

时间:2019-07-19 02:36:38

标签: python opencv

我似乎无法弄清楚为什么我要返回一个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() 

错误: enter image description here

1 个答案:

答案 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()