有没有办法在OpenStitching中缓存平面变形器生成的变形点,从而避免每帧重新计算?

问题描述 投票:0回答:1

我正在编写一个Python脚本来处理两个视频文件,校准它们,并将它们合并成一个全景视图。由于两个相机都保持静止,我的目标是仅计算一次接缝掩模和扭曲点以供重复使用。目前,由于平面扭曲方法非常耗时,全景图创建尚未达到所需的 30 FPS。因此,我正在寻找一种解决方案来计算和保存平面扭曲器中使用的点,以避免为每一帧重新计算它们。

这是我目前正在使用的 2 个功能。

函数 getCamSeammask 将相机参数和接缝掩模存储在变量中,因此您不必每 2 帧重新计算它们。

def getCamSeammask (frameLeft, frameRight):
    global cameraMask

    images = Images.of([frameLeft, frameRight])
    medium_imgs = images.resize(Images.Resolution.MEDIUM)
    final_imgs = list(images.resize(Images.Resolution.FINAL))
    features = [FINDER.detect_features(img) for img in medium_imgs]
    matches = MATCHER.match_features(features)
    conf = MATCHER.get_confidence_matrix(matches)
    cameras = CAMERA_ESTIMATOR.estimate(features,matches)
    cameras = CAMERA_ADJUSTER.adjust(features,matches,cameras)
    cameras = WAVE_CORRECTOR.correct(cameras)
    WARPER.set_scale(cameras)
    final_sizes = images.get_scaled_img_sizes(Images.Resolution.FINAL)
    camera_aspect = images.get_ratio(Images.Resolution.MEDIUM, Images.Resolution.FINAL)
    warped_final_imgs = list(WARPER.warp_images(final_imgs, cameras, camera_aspect))
    warped_final_masks = list(WARPER.create_and_warp_masks(final_sizes, cameras, camera_aspect))
    final_corners, final_sizes = WARPER.warp_rois(final_sizes, cameras, camera_aspect)
    seamMask = SEAM_FINDER.find(warped_final_imgs, final_corners, warped_final_masks)
    cameraMask = (cameras, seamMask)

以及创建全景图的函数 getPanorama

def getPanorama(frameLeft, frameRight):
    cam = cameraMask[0]
    seammask = cameraMask[1]
    images = Images.of([frameLeft, frameRight])
    final_sizes = images.get_scaled_img_sizes(Images.Resolution.FINAL)
    camera_aspect = images.get_ratio(Images.Resolution.MEDIUM, Images.Resolution.FINAL)

    warped_final_imgs = list(WARPER.warp_images([frameLeft,frameRight], cam, camera_aspect))
    final_corners, final_sizes = WARPER.warp_rois(final_sizes, cam, camera_aspect)
    BLENDER.prepare(final_corners, final_sizes)

    for img, mask, corner in zip(warped_final_imgs, seammask, final_corners):
        BLENDER.feed(img, mask, corner)

    panorama,_ = BLENDER.blend()
    return panorama

我正在使用 Python 中的 OpenStitching 库,它构建在 OpenCV 之上。

python image-stitching
1个回答
0
投票

我正在寻找一种解决方案来计算和保存平面扭曲器中使用的点,以避免为每帧重新计算它们

这已经被问过并回答了这里这里

您可以扩展该方法来保存第一个视频帧的接缝蒙版

© www.soinside.com 2019 - 2024. All rights reserved.