gpt4 book ai didi

python - Python 中的 OpenCV 2.4 - 视频处理

转载 作者:太空狗 更新时间:2023-10-29 20:38:59 29 4
gpt4 key购买 nike

项目:在视频的每一帧上添加运行日期/时间戳。 (数码摄像机的结果,我爸爸问我他怎么能把时间戳(以毫秒为分辨率)永久地添加到视频中。

一位 friend 向我介绍了 opencv(实际上是 emgucv),并且由于我的喜好,我在 python 中尝试了 opencv。

文档很蹩脚,我什至花了很长时间(花了大约 5 个小时)才安装了这个包。资料来源:

我在 Windows 7 x64 上工作,所以我不得不降级我的 python 以使用 numpy(没有用于 win64 的 numpy 版本)

使用 PyCharm IDE。

最终的安装让我得到了文件 C:\Python27\Lib\site-packages\cv2.pyd

我正在尝试查找文档以开始工作,但我很困惑并且不知道从哪里开始,所有示例都令人困惑 - 即:

我的问题:

  1. 我做错了什么吗?这不是安装opencv的方式吗?
  2. 我在哪里可以找到好的文档?
  3. 假设我已经准备好我的文本(在一个字符串中),有人可以帮助我开始我的申请吗?

谢谢

最佳答案

使用 OpenCV 和 Python,您的任务应该相对容易完成。看来你是 OpenCV 的新手,所以我会尽量让我的解释透彻,但如果你需要任何澄清,请随时询问。

我不确定您是从实时摄像机视频馈送中获取数据,还是对录制的镜头进行后处理。无论哪种方式...

获取数据。如果使用实时提要:

capture = cv2.VideoCapture(0)

如果使用录制的镜头:

capture = cv2.VideoCapture("your_reading_file.avi")

初始化视频编写器。看at this question寻求有关编解码器的帮助 - 找到一个可用的编解码器并非易事。我也在使用 Windows 7 x64,下面提到的编解码器是唯一适合我的编解码器。此外,将变量 fps 设置为尽可能接近实际传入的视频帧速率 - 一旦开始写入帧就无法更改它。

flag, frame = capture.read() # **EDIT:** to get frame size
width = np.size(frame, 1) #here is why you need numpy! (remember to "import numpy as np")
height = np.size(frame, 0)
writer = cv2.VideoWriter(filename="your_writing_file.avi",
fourcc=cv2.cv.CV_FOURCC('I', 'Y', 'U', 'V'), #this is the codec that works for me
fps=15, #frames per second, I suggest 15 as a rough initial estimate
frameSize=(width, height))

处理此数据并添加您的文本。最后,将编辑后的帧写入视频文件。

while True:
flag, frame = capture.read() #Flag returns 1 for success, 0 for failure. Frame is the currently processed frame

if flag == 0: #Something is wrong with your data, or the end of the video file was reached
break
x = width/2
y = height/2 #change to the desired coordinates
text_color = (255,0,0) #color as (B,G,R)
cv2.putText(frame, "your_string", (x,y), cv2.FONT_HERSHEY_PLAIN, 1.0, text_color, thickness=1, lineType=cv2.CV_AA)

writer.write(frame) #write to the video file

就这么简单!我几乎每天都使用上面的代码将文本写入视频文件,所以它确实有效。我能预见的唯一潜在问题是编解码器,不幸的是我对此知之甚少。我希望这可以解决您的问题,请随时提出更多问题。

编辑:对您评论中的问题的回答。

1.) 据我所知,您只能使用 .avi,因为您必须使用 OpenCV 的未压缩格式。恐怕我不知道使用其他(压缩)格式。也许您可以使用第三方程序进行前/后转换? frame 异常的原因是我的错误,我已经编辑了答案以包含缺失的行。

2.) 恐怕我不知道如何读取元数据。如果我发现了,我会告诉你的。我自己寻找视频帧率的 hackish 解决方案是让 OpenCV 运行一次视频,使用 Time 模块来计算平均帧率。然后可以在编写视频文件时使用此估计。

3.) 我发现最终视频的大小可能与原始视频有很大差异,这取决于几个因素,最重要的是所选 fps 与实际原始帧速率的接近程度。

4.) 至于其他字体,有几种可用。我可以给你转介 this question快速概览。这是相关文档:

fontFace – Font type. One of FONT_HERSHEY_SIMPLEX, 
FONT_HERSHEY_PLAIN,
FONT_HERSHEY_DUPLEX,
FONT_HERSHEY_COMPLEX,
FONT_HERSHEY_TRIPLEX,
FONT_HERSHEY_COMPLEX_SMALL,
FONT_HERSHEY_SCRIPT_SIMPLEX, or
FONT_HERSHEY_SCRIPT_COMPLEX,
where each of the font ID’s can be combined with FONT_HERSHEY_ITALIC to get the slanted letters.

关于python - Python 中的 OpenCV 2.4 - 视频处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12290023/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com