C++ opencv视频稳定算法
我正在使用opencv编写视频稳定器。算法如下: 虽然视频中有更多帧:C++ opencv视频稳定算法,c++,opencv,video,C++,Opencv,Video,我正在使用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,我认为您在实时性方面不会有任何问题。请在答案中添加相关部分,或者这看起来太像一个只包含链接的答案谢谢,我会试试