我在一个有足够重叠区域的房间里安装了两个闭路电视摄像机。来自这些摄像机的视频流经过校准。我使用 here 中的 OpenCV 拼接 python 代码来拼接来自两个摄像机的两个各自的视频帧。缝合输出有晃动。如何克服这些运动?请推荐。
此处已经报告了拼接相机图像流造成的晃动。拼接管道将在每个stitch
上独立校准其内部摄像头。在视频拼接的情况下,问题是从一帧到另一帧存在一些扭曲。解决方案是仅使用第一帧校准相机,然后仅使用这些相机。这也将节省每帧特征匹配所需的时间。为此,您可以从
VideoStitcher
继承
Stitcher
并覆盖
initialize_stitcher()
和
stitch()
from stitching import Stitcher
from stitching.images import Images
class VideoStitcher(Stitcher):
def initialize_stitcher(self, **kwargs):
super().initialize_stitcher(kwargs)
self.cameras = None
self.cameras_registered = False
def stitch(self, images, feature_masks=[]):
self.images = Images.of(
images, self.medium_megapix, self.low_megapix, self.final_megapix
)
if not self.cameras_registered:
imgs = self.resize_medium_resolution()
features = self.find_features(imgs, feature_masks)
matches = self.match_features(features)
imgs, features, matches = self.subset(imgs, features, matches)
cameras = self.estimate_camera_parameters(features, matches)
cameras = self.refine_camera_parameters(features, matches, cameras)
cameras = self.perform_wave_correction(cameras)
self.estimate_scale(cameras)
self.cameras = cameras
self.cameras_registered = True
imgs = self.resize_low_resolution()
imgs, masks, corners, sizes = self.warp_low_resolution(imgs, self.cameras)
self.prepare_cropper(imgs, masks, corners, sizes)
imgs, masks, corners, sizes = self.crop_low_resolution(
imgs, masks, corners, sizes
)
self.estimate_exposure_errors(corners, imgs, masks)
seam_masks = self.find_seam_masks(imgs, corners, masks)
imgs = self.resize_final_resolution()
imgs, masks, corners, sizes = self.warp_final_resolution(imgs, self.cameras)
imgs, masks, corners, sizes = self.crop_final_resolution(
imgs, masks, corners, sizes
)
self.set_masks(masks)
imgs = self.compensate_exposure_errors(corners, imgs)
seam_masks = self.resize_seam_masks(seam_masks)
self.initialize_composition(corners, sizes)
self.blend_images(imgs, seam_masks, corners)
return self.create_final_panorama()