【问题标题】:cv2_imshow() doesn't render video file in Google Colabcv2_imshow() 不在 Google Colab 中呈现视频文件
【发布时间】:2019-11-19 00:28:38
【问题描述】:

我正在尝试将一些 OpenCV 图像分析(使用 Python3)从本地 Jupyter 笔记本迁移到 Google Colab。

我的原始 Jupyter Notebook 代码运行良好,视频渲染良好(在其自己的窗口中)(请参阅下面的代码子集)。此代码使用 cv2.imshow() 来渲染视频。在 Colab 中使用相同的“cv2.imshow()”代码时,视频不会呈现。

基于this suggestion - 我切换到在 Colab 中使用 cv2_imshow()。但是,此更改会导致 470 张图像(每帧 1 张)的垂直系列,而不是正在播放的视频。

这是link to the colab file

谁能概述如何在 Colab 中渲染 OpenCV 处理的视频?

import numpy as np
import cv2

cap = cv2.VideoCapture(r"C:\.....Blocks.mp4")
counter = 0
while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()
    cv2.imshow(frame)

    print("Frame number: " + str(counter))
    counter = counter+1
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

【问题讨论】:

  • imshow 在代码运行的任何机器上创建窗口。如果是 Jupyter notebook,它在 Jupyter 服务器上运行。当您在本地运行服务器时,您会在计算机上看到该窗口。但是,当您在 Colab 上运行它时,它会在数据中心的某些机器上执行,谁知道在哪里......

标签: python opencv opencv3.0 google-colaboratory


【解决方案1】:

cv2.imshow() 方法显示图像。因此,您所做的基本上是逐帧读取整个视频并显示该帧。要查看整个视频,您需要将这些帧写回 VideoWriter 对象。

所以,在while 循环之前创建一个VideoWriter 对象:

res=(360,240) #resulotion
fourcc = cv2.VideoWriter_fourcc(*'MP4V') #codec
out = cv2.VideoWriter('video.mp4', fourcc, 20.0, res)

使用write()方法处理后写入帧

out.write(frame)

最后,以与 VideoCapture 相同的方式释放对象

out.release()

现在,将在您的视频中写入一个名为 video.mp4

的视频

【讨论】: