- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
项目:在视频的每一帧上添加运行日期/时间戳。 (数码摄像机的结果,我爸爸问我他怎么能把时间戳(以毫秒为分辨率)永久地添加到视频中。
一位 friend 向我介绍了 opencv(实际上是 emgucv),并且由于我的喜好,我在 python 中尝试了 opencv。
文档很蹩脚,我什至花了很长时间(花了大约 5 个小时)才安装了这个包。资料来源:
我在 Windows 7 x64 上工作,所以我不得不降级我的 python 以使用 numpy(没有用于 win64 的 numpy 版本)
使用 PyCharm IDE。
最终的安装让我得到了文件 C:\Python27\Lib\site-packages\cv2.pyd
我正在尝试查找文档以开始工作,但我很困惑并且不知道从哪里开始,所有示例都令人困惑 - 即:
我的问题:
谢谢
最佳答案
使用 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/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!