0%

opencv-seamlessClone-图片实现无缝融合

OpenCV:seamlessClone泊松融合(Python)

OpenCV3中有许多让人激动的新特性,今天学习记录下关于图像融合相关的函数 。

API解释

Python

1
output = cv2.seamlessClone(src, dst, mask, center, flags)
  • src 目标影像,代表的是子图

  • dst 背景图像,代表的是母图

  • mask 目标影像上的mask,表示目标影像上那些区域是感兴趣区域

  • center 目标影像的中心在背景图像上的坐标!注意是目标影像的中心

  • flags 选择融合的方式,目前有NORMAL_CLONE、MIXED_CLONE和MONOCHROME_TRANSFER三种方法

    • NORMAL_CLONE: 不保留dstination 图像的texture细节。目标区域的梯度只由源图像决定。
    • MIXED_CLONE: 保留destination 图像的texture 细节。目标区域的梯度是由原图像和目的图像的组合计算出来(计算dominat gradient)。
    • MONOCHROME_TRANSFER: 不保留src图像的颜色细节,只有src图像的质地,颜色和目标图像一样,可以用来进行皮肤质地填充。
  • output 输出图像

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# coding:utf-8
import cv2
import numpy as np

im = cv2.imread("sky.png")
obj= cv2.imread("plane.png")

# Create an all white mask
mask = 255 * np.ones(obj.shape, obj.dtype)

# The location of the center of the src in the dst
width, height, channels = im.shape
center = (height/2, width/2)

# Seamlessly clone src into dst and put the results in output
normal_clone = cv2.seamlessClone(obj, im, mask, center, cv2.NORMAL_CLONE)
mixed_clone = cv2.seamlessClone(obj, im, mask, center, cv2.MIXED_CLONE)
monochrome_transfer = cv2.seamlessClone(obj, im, mask, center, cv2.MONOCHROME_TRANSFER)

# Write results
cv2.imwrite("opencv-normal-clone-example.jpg", normal_clone)
cv2.imwrite("opencv-mixed-clone-example.jpg", mixed_clone)
cv2.imwrite("opencv-monochrome-transfer-example.jpg", monochrome_transfer)

使用图片

sky.png
天空
plane.png
飞机
NORMAL_CLONE 融合的效果

MIXED_CLONE 融合的效果

MONOCHROME_TRANSFER 融合的效果

图片是参考别人发的,可能选的素材的问题,NORMAL_CLONE,MIXED_CLONE 这两个感觉合并后差别不大
参考