为什么itching_detailed.py和stitching_detailed.cpp会产生不同的结果?

时间:2020-09-22 11:11:42

标签: python c++ opencv sample

我试图了解为什么当itching_detailed.py和stitching_detailed.cpp的逻辑代码非常相似时,会有如此不同的结果。

这是两个代码库的链接

https://github.com/opencv/opencv/blob/master/samples/python/stitching_detailed.py https://github.com/opencv/opencv/tree/master/samples/cpp

问题是,我应如何以及在哪里编辑itching_detailed.py以使其产生与stitching_detailed.cpp一样好的缝合质量?

    # """calculate corner and size of time step"""
corners = []
sizes = []
for i in range(len(img_names)):
    cameras[i].focal *= 0.9999/work_scale
    cameras[i].ppx *= 1/work_scale
    cameras[i].ppy *= 1/work_scale
    sz = (full_img_sizes[i][0] * 1, full_img_sizes[i][1] * 1)
    K = cameras[i].K().astype(np.float32)
    roi = warper.warpRoi(sz, K, cameras[i].R)
    corners.append(roi[0:2])
    sizes.append(roi[2:4])

dst_sz = cv2.detail.resultRoi(corners=corners, sizes=sizes)
blender.prepare(dst_sz)

"""Panorama construction step"""
# https://github.com/opencv/opencv/blob/master/samples/cpp/stitching_detailed.cpp#L725 ?
for idx, name in enumerate(img_names):
    corner, image_warped = warper.warp(name, cameras[idx].K().astype(np.float32), cameras[idx].R, cv2.INTER_LINEAR, cv2.BORDER_REFLECT)
    p, mask_warped = warper.warp(255 * np.ones((name.shape[0], name.shape[1]), np.uint8), cameras[idx].K().astype(np.float32), cameras[idx].R, cv2.INTER_NEAREST, cv2.BORDER_CONSTANT)
    compensator.apply(idx, corners[idx], image_warped, mask_warped)
    mask_warped = cv2.bitwise_and(cv2.resize(cv2.dilate(masks_warped[idx], None), (mask_warped.shape[1], mask_warped.shape[0]), 0, 0, cv2.INTER_LINEAR_EXACT), mask_warped)
    blender.feed(cv2.UMat(image_warped.astype(np.int16)), mask_warped, corners[idx])

result, result_mask = blender.blend(None, None)
dst = cv2.normalize(src=result, dst=None, alpha=255., norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)

我的假设是python的“ blender”功能与c ++混合器不同。我认为,这是一段代码片段,我把它缩小为缩小我的问题的范围。

0 个答案:

没有答案
相关问题