Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的OpenCV 2.4-视频处理_Python_Opencv_Video Processing - Fatal编程技术网

python中的OpenCV 2.4-视频处理

python中的OpenCV 2.4-视频处理,python,opencv,video-processing,Python,Opencv,Video Processing,项目:在视频的每一帧上添加一个运行日期/时间戳。(这是数码摄像机的结果,我父亲问我他如何能将时间戳(毫秒分辨率)永久地添加到视频中 一位朋友指给我看opencv(实际上是emgucv),由于我的偏好,我用python试试opencv 文档是蹩脚的,我甚至花了很长时间(花了我大约5个小时)才安装这个软件包。 资料来源: OpenCV 2.4(柳树车库): Numpy(我甚至不知道它做什么或为什么需要): 活动Python 2.7: 我在Windows7x64上工作,所以我不得不降级python

项目:在视频的每一帧上添加一个运行日期/时间戳。(这是数码摄像机的结果,我父亲问我他如何能将时间戳(毫秒分辨率)永久地添加到视频中

一位朋友指给我看opencv(实际上是emgucv),由于我的偏好,我用python试试opencv

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

  • OpenCV 2.4(柳树车库):
  • Numpy(我甚至不知道它做什么或为什么需要):
  • 活动Python 2.7:
我在Windows7x64上工作,所以我不得不降级python以使用numpy(win64没有numpy版本)

使用pyide

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

我正试图找到要开始使用的文档,但我非常困惑,不知道从何处开始,所有示例都令人困惑-即:

  • “官方”文档适用于c/c++,没有python参考:
  • python的示例似乎合理,但与我需要的不太接近:
  • 示例接近我需要的内容,但似乎不符合逻辑(cv而不是cv2??):
我的问题是:

  • 我做错什么了吗?这不是安装opencv的方法吗
  • 我在哪里可以找到好的文档
  • 假设我已经准备好了文本(字符串),有人能帮我开始我的应用程序吗

  • 谢谢

    使用OpenCV和Python,您的任务应该相对容易完成。您似乎是OpenCV的新手,因此我将尝试详细解释,但请随时询问您是否需要澄清

    我不确定你是从现场摄像机视频源获取数据,还是对录制的片段进行后期处理。无论哪种方式

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

    capture = cv2.VideoCapture(0)
    
    如果使用录制的镜头:

    capture = cv2.VideoCapture("your_reading_file.avi")
    
    初始化视频编写器。查找有关编解码器的帮助-查找工作的编解码器并非易事。我也在使用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.)恐怕我不知道如何阅读元数据。如果我发现了,我会让你知道的。我自己的查找视频帧率的黑客解决方案是让OpenCV在视频中运行一次,使用
    Time
    模块计算平均帧率。然后,可以在写入视频文件时使用此估计值

    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
    
    3.)我发现结果视频的大小可能与原始视频的大小有很大差异,这取决于几个因素,最重要的是所选的
    fps
    与实际原始帧率的接近程度

    4.)至于其他字体,有几种可用。我可以让你快速浏览一下。以下是相关文件:

    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.
    
    用于读取视频文件元数据(包括帧率、高度和宽度)

    进口:

    from hachoir_core.error import HachoirError
    from hachoir_core.cmd_line import unicodeFilename
    from hachoir_parser import createParser
    from hachoir_core.tools import makePrintable
    from hachoir_metadata import extractMetadata
    from hachoir_core.i18n import getTerminalCharset
    from hachoir_metadata.metadata_item import QUALITY_BEST
    
    功能:

    def metaDataFile(filePath):
        filename, realname = unicodeFilename(filePath), filePath
        parser = createParser(filename, realname)
        try:
            metadata = extractMetadata(parser, QUALITY_BEST)
        except HachoirError, err:
            print "Metadata extraction error: %s" % unicode(err)
            metadata = None
        if not metadata:
            print metadata
            print "Unable to extract metadata"
            exit(1)
        return metadata
    
    用法:

    metadata = metaDataFile(videoPath)
    width = metadata.get('width')
    height = metadata.get('height')
    fps = metadata.get('frame_rate')
    
    要查看相关属性:

    for data in sorted(metadata):
        if len(data.values ) > 0:
            print data.key, data.values[0].value
    

    寻找一个可能的替代方案。我会尝试一下,但我已经浏览了他们的网站,看起来文档太少了。我不太理解交互式shell(我需要使用它吗?我只能通过python脚本工作吗?)我不使用交互式shell。文档只是向您展示函数的存在,但其余的功能都是不言自明的。ahhh。simple cv installation pack错误地安装了它(my 2.7.2中的一些软件包和新的2.7.3 python库中的一些软件包)太好了!这非常接近我的需要。一些问题:1.为什么只有AVI文件才能打开?(当我尝试读取帧的宽度/高度时抛出异常),2.我如何读取文件的元数据(确切地说,是创建时间/日期和FPS)3.为什么生成的视频要大3到4倍(空间,当然不是帧),4.我的字体还有哪些字体和样式?我已经编辑了我的答案,包括了你的一些新问题。请注意,我的原始代码中有一个错误,但现在已经修复。请询问是否还有什么不清楚的地方!嘿,你能帮我吗?我不明白视频的音频是怎么回事。这种方法没有s不包括音频,因为我们只是在添加文本后将视频的帧写入新文件。可以使用第三方软件从原始视频中提取音频,然后将其添加到新视频文件。但是,如果帧速率不同,这将失败,因为这将导致音频不同步。sHOWS如何做到这一点,但恐怕它是在C++中。也许你可以把它端口?抬头,除非你也有“进口CV2.CV作为CV”。编解码器被加载为“FuccC= CV2.CVCVY-FECC(‘i’,‘y’,‘u’,’v’’”。