我在OpenCV(cv::videostab(中搜索了一个函数,它可以让我实时进行视频稳定。但据我所知,在OpenCV中,这还不可用。因此,TwoPassStabilizer(OnePassStabilizer(需要一次整个视频,而不是两个连续的帧。
Ptr<VideoFileSource> source = makePtr<VideoFileSource>(inputPath); //it's whole video
TwoPassStabilizer *twopassStabilizer = new TwoPassStabilizer();
twoPassStabilizer->setFrameSource(source);
所以我必须在没有OpenCV视频稳定类的情况下做到这一点。这是真的吗?
OpenCV 库不提供用于实时视频稳定的唯一代码/模块。
话虽如此,如果您使用的是python代码,那么您可以使用我强大的线程VidGear视频处理python库,该库现在以最小的延迟提供实时视频稳定功能,并且以Stabilizer类几乎没有额外的计算能力要求为代价。为方便起见,下面是一个基本用法示例:
# 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
更高级的用法可以在这里找到:https://github.com/abhiTronix/vidgear/wiki/Real-time-Video-Stabilization#real-time-video-stabilization-with-vidgear
我们通过固定坐标系创建了一个视频稳定模块。它是开源的。 https://github.com/RnD-Oxagile/EvenVizion