OpenCV numpy 矩阵框架用零填充
OpenCV numpy matrix frame is filled with zeroes
我最近在 windows 上下载了 openCV 3.4.5,Python 3.5.4。
我运行这段基本代码显示视频:
import cv2
cap = cv2.VideoCapture(0)
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
print(frame)
# Display the resulting frame
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
我的笔记本电脑的网络摄像头显示了一段视频。
请注意,我打印了视频中的每一帧,但在我的控制台输出中,每个 numpy 数组都填充了零。我不明白为什么会这样,因为视频可以播放
示例控制台输出
[[[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]]
...
来自Opencv docs,VideoCapture
的read
方法returns(ret, frame)
的一个元组。如果 frame
的读取成功,frame
将为 True
,否则为 False
。因此,为了让您弄清楚 运行 您的代码时发生了什么,您应该这样做:
- 将
while
循环中的打印语句更改为 print(ret)
然后再次 运行 您的代码
- 如果
ret
值大部分或全部是 True
,则每个 frame
的读入通常是成功的。这意味着 frame
数组实际上并不是空的,它们只是出于某种原因在您的打印输出中以这种方式出现(例如,边缘上的所有值都是 0
,但在被点省略的部分 ...
)。如果您随后将打印语句更改为 print(frame.sum())
,您应该能够轻松地看到每个 frame
中至少有一些非零值
- 如果
ret
值大部分是 False
,那么这意味着大多数 Frame
的读取失败,这反过来意味着空数组是预期值.如果 imshow
在这种情况下真的还在显示图像,那就意味着真正非常奇怪的事情正在发生。
我最近在 windows 上下载了 openCV 3.4.5,Python 3.5.4。
我运行这段基本代码显示视频:
import cv2
cap = cv2.VideoCapture(0)
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
print(frame)
# Display the resulting frame
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
我的笔记本电脑的网络摄像头显示了一段视频。
请注意,我打印了视频中的每一帧,但在我的控制台输出中,每个 numpy 数组都填充了零。我不明白为什么会这样,因为视频可以播放
示例控制台输出
[[[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]]
...
来自Opencv docs,VideoCapture
的read
方法returns(ret, frame)
的一个元组。如果 frame
的读取成功,frame
将为 True
,否则为 False
。因此,为了让您弄清楚 运行 您的代码时发生了什么,您应该这样做:
- 将
while
循环中的打印语句更改为print(ret)
然后再次 运行 您的代码- 如果
ret
值大部分或全部是True
,则每个frame
的读入通常是成功的。这意味着frame
数组实际上并不是空的,它们只是出于某种原因在您的打印输出中以这种方式出现(例如,边缘上的所有值都是0
,但在被点省略的部分...
)。如果您随后将打印语句更改为print(frame.sum())
,您应该能够轻松地看到每个frame
中至少有一些非零值
- 如果
ret
值大部分是False
,那么这意味着大多数Frame
的读取失败,这反过来意味着空数组是预期值.如果imshow
在这种情况下真的还在显示图像,那就意味着真正非常奇怪的事情正在发生。
- 如果