python - 如何减少拼接图像之间的颜色差异以实现平滑的颜色过渡?

标签 python opencv image-processing scipy computer-vision

我正在拼接多张图片,我想改善它们之间的颜色过渡。这是两张图片:

  1. http://imgur.com/nG5I0nr
  2. http://imgur.com/EZFzNeL

这是拼接的图像:

您可能会看到,颜色过渡非常差。我想让它们看起来像是相同的图像(或至少接近)

我目前的做法:

我首先使用 filter2D 移除接缝,然后使用拉普拉斯变换获得图像连接点的掩码,并使用这个掩码,我像这样进行修复:

接缝去除:

kernel = np.ones((5,5),np.float32)/25
seam_removal = cv2.filter2D(data_map,-1,kernel)

这是我获得的图像连接点的 mask ,并使用它在稍微膨胀后进行修复:

但正如您在最终图像中看到的那样,这根本不会改善混合效果。

最佳答案

我不知道这是否是个好主意,但我认为你可以使用 Kmeans “调整”图像的颜色。

首先,您将图像转换为RGB

image= cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

其次,用Kmeans算法训练第一张图片,找出“簇色”

clt = KMeans(n_clusters = 20)
clt.fit(img1)
colors = clt.cluster_centers_

第三种,利用步骤2中找到的簇色对图2中的颜色进行转换。可以引用这个tutorial .

最后,将两张图片合二为一。

我还有第二种方法,那就是你可以将两个图像的色调更改为相同的色调。你可以看看 here .

关于python - 如何减少拼接图像之间的颜色差异以实现平滑的颜色过渡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37509013/

相关文章:

python - 添加和访问 numpy 结构化数组的对象类型字段

python - 为什么 Python 的 math.factorial 不能很好地处理线程?

c# - OpenCV.NET、OpenCVSharp 和 EmguCV 之间有什么区别?

android - 是否可以将边缘检测输出转换为二值图像 OpenCV

c++ - OpenCV:在while循环中填充Mat?

algorithm - 查找不同图像之间相似性的最准确算法是什么

python - Tornado/Motor 聚合失败 : yielded unknown object MotorAggregationCursor

python - Python 中的空间数据热图

c# - 在 OpenCVSharp 中水平翻转图像

c++ - OpenCV 的 findHomography 产生无意义的结果