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

问题描述

我试图了解为什么当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),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]),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 ++混合器不同。我认为,这是一段代码片段,我把它缩小为缩小我的问题的范围。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)