当前位置: 首页 > 面试题库 >

如何使用OpenCV和Python在视频流中逐帧处理视频图像

余铭晨
2023-03-14
问题内容

我是OpenCV的初学者。我想对要上传到服务器的视频帧进行一些图像处理。我只想读取可用的框架并将它们写入目录中。然后,等待视频的另一部分上载并将帧写入目录。并且,我应该等待每个帧都完全上传,然后将其写入文件。

您能告诉我如何使用OpenCV(Python)吗?

编辑1:
我编写了这段代码,用于从文件中捕获视频,而新数据将附加在文件末尾。换句话说,该out.mp4文件不是完整的视频,并且另一个程序正在其上写入新的帧。我要做的是,等待其他程序编写新框架,然后读取并显示它们。

这是我的代码:

import cv2
cap = cv2.VideoCapture("./out.mp4")

while True:
    if cap.grab():
        flag, frame = cap.retrieve()
        if not flag:
            continue
        else:
            cv2.imshow('video', frame)
    if cv2.waitKey(10) == 27:
        break

所以问题出在cap.grab()电话上!如果没有框架,它将返回False!即使我等了很长时间,它也不会再捕获帧。


问题答案:

阅读完的文档后VideoCapture。我发现您可以告诉VideoCapture,下次调用VideoCapture.read()(或VideoCapture.grab())要处理哪个帧。

问题是,当您要准备read()一个尚未准备就绪的框架时,该VideoCapture对象会卡在该框架上而永远无法进行。因此,您必须强制其从上一帧重新开始。

这是代码

import cv2

cap = cv2.VideoCapture("./out.mp4")
while not cap.isOpened():
    cap = cv2.VideoCapture("./out.mp4")
    cv2.waitKey(1000)
    print "Wait for the header"

pos_frame = cap.get(cv2.cv.CV_CAP_PROP_POS_FRAMES)
while True:
    flag, frame = cap.read()
    if flag:
        # The frame is ready and already captured
        cv2.imshow('video', frame)
        pos_frame = cap.get(cv2.cv.CV_CAP_PROP_POS_FRAMES)
        print str(pos_frame)+" frames"
    else:
        # The next frame is not ready, so we try to read it again
        cap.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, pos_frame-1)
        print "frame is not ready"
        # It is better to wait for a while for the next frame to be ready
        cv2.waitKey(1000)

    if cv2.waitKey(10) == 27:
        break
    if cap.get(cv2.cv.CV_CAP_PROP_POS_FRAMES) == cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT):
        # If the number of captured frames is equal to the total number of frames,
        # we stop
        break


 类似资料:
  • 下面是我的代码: 所以问题是调用!当没有框架时,它将返回!而且它不会再捕捉帧了,即使我等了很长时间。

  • 我正在使用一个循环来访问使用Python和OpenCV的视频文件的所有帧。在访问每个帧时,我将该帧的索引添加到一个列表中。 但是,我比较了列表的大小和使用

  • 我试图捕捉一个视频,并转换成帧使用python和OpenCV。我遵循了在Windows8中为python导入openCV2库所需的步骤,如下所示: 打开Python空闲或终端,然后键入 我已经完成了将opencv库导入Python的上述步骤。 但是,当我导入CV2库并试图捕获视频时,我无法使用函数生成帧,也无法使用函数访问帧。我无法捕捉帧。请查找下面的代码。

  • 我正在尝试使用ffmpeg逐帧编写视频,如下所述:http://zulko.github.io/blog/2013/09/27/read-and-write-video-frames-in-python-using-ffmpeg/ 然而,我总是得到一个OSError:[Errno 22]无效参数。我在Windows7上使用Python 3.4。代码如下: 任何帮助都非常感谢。 编辑:根据此处的要求

  • 欢迎阅读系列教程,内容涵盖 OpenCV,它是一个图像和视频处理库,包含 C ++,C,Python 和 Java 的绑定。 OpenCV 用于各种图像和视频分析,如面部识别和检测,车牌阅读,照片编辑,高级机器人视觉,光学字符识别等等。

  • 问题内容: 任何人都有关于如何使用Hbase处理非结构化数据(如音频,视频和图像)的想法。我为此做了很多尝试,但我没有任何想法。请提供任何帮助。 问题答案: 选项1:将图像转换为字节数组,您可以准备放置请求并插入到表中。同样,也可以实现音频和视频文件。 参见https://docs.oracle.com/javase/7/docs/api/javax/imageio/package- summar