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
C++ opencv视频稳定算法_C++_Opencv_Video - Fatal编程技术网

C++ opencv视频稳定算法

C++ opencv视频稳定算法,c++,opencv,video,C++,Opencv,Video,我正在使用opencv编写视频稳定器。算法如下: 虽然视频中有更多帧: 从视频中获取新帧 检测新帧中的关键点 计算新关键点的描述符 匹配新帧和上一帧的描述符 筛选匹配项以获得好的匹配项 查找上一帧和新帧之间的单应性 将单应(透视)应用于新帧,从而创建“调整后的新帧” 将上一帧设置为等于“调整后的新帧”(描述符、关键点) 我有几个问题。我走对了吗?如何进行实际的稳定(使用高斯滤波器或其他方法) 以下是可能的步骤顺序: 第一步。从电影文件中读取帧 第二步。从每个帧收集显著点 第三步。选择点之间的对应

我正在使用opencv编写视频稳定器。算法如下:

虽然视频中有更多帧:

  • 从视频中获取新帧
  • 检测新帧中的关键点
  • 计算新关键点的描述符
  • 匹配新帧和上一帧的描述符
  • 筛选匹配项以获得好的匹配项
  • 查找上一帧和新帧之间的单应性
  • 将单应(透视)应用于新帧,从而创建“调整后的新帧”
  • 将上一帧设置为等于“调整后的新帧”(描述符、关键点)

  • 我有几个问题。我走对了吗?如何进行实际的稳定(使用高斯滤波器或其他方法)

    以下是可能的步骤顺序:

    第一步。从电影文件中读取帧

    第二步。从每个帧收集显著点

    第三步。选择点之间的对应关系

    第四步。从噪声对应估计变换

    第五步。变换逼近与平滑

    第六步。运行完整的视频

    有关每个步骤的更多详细信息,请参见:


    我认为您可以遵循OpenCV中的相同步骤。

    如果您使用的是python代码,那么您可以使用我强大的线程化视频处理python库,该库现在提供实时视频稳定,延迟最小,并且几乎不需要额外的计算能力。以下是一个基本用法示例,以方便您使用:

    # import libraries
    from vidgear.gears import VideoGear
    from vidgear.gears import WriteGear
    import cv2
    
    stream = VideoGear(source=0, stabilize = True).start() # To open any valid video stream(for e.g device at 0 index)
    
    # infinite loop
    while True:
    
        frame = stream.read()
        # read stabilized frames
    
        # check if frame is None
        if frame is None:
            #if True break the infinite loop
            break
    
        # do something with stabilized frame here
    
        cv2.imshow("Stabilized Frame", frame)
        # Show output window
    
        key = cv2.waitKey(1) & 0xFF
        # check for 'q' key-press
        if key == ord("q"):
            #if 'q' key-pressed break out
            break
    
    cv2.destroyAllWindows()
    # close output window
    
    stream.stop()
    # safely close video stream
    

    更高级的用法可以在这里找到:

    您知道OpenCV已经实现了吗?出于学习目的,我必须自己实现它。处理时间有任何限制吗?所以你需要实时算法还是一个耗时的算法也可以考虑?谢谢你的回复。第二个选项,处理时间没有限制如果您使用的是Surf,我认为您在实时性方面不会有任何问题。请在答案中添加相关部分,或者这看起来太像一个只包含链接的答案谢谢,我会试试