使用cv2进行图像融合

加入我们有两张图,分别是这样:

使用cv2进行图像融合_第1张图片

我们想要将第二个放置在第一个图上,直接贴图就是这样的:

 这样贴着,没啥意义,我们使用seamlessClone处理一下就会变得很好:

 看着自然很多了吧,上述的代码如下:

import cv2
import numpy as np

b3=cv2.imread('b3.jpg')
b2=cv2.imread('b2.jpg')
#b1=cv2.resize(b1,(256,256))
center_x=300
center_y=500

#normal_clone
mask = 255 * np.ones(b3.shape, b3.dtype)
normal_clone = cv2.seamlessClone(b3, b2, mask, (center_x+256,center_y-256), cv2.NORMAL_CLONE)
cv2.imshow('normal_clone',normal_clone)
#max_clone
max_clone = cv2.seamlessClone(b3, b2, mask, (center_x+256,center_y-256), cv2.MIXED_CLONE)
cv2.imshow('max_clone',max_clone)
#直接贴
#print(b3.shape)
b2[200:416,300:1151]=b3
cv2.imshow('b2',b2)
cv2.waitKey(0)

同样,我们想讲一个美女头像贴在这个草原上:

先看一下直接贴的效果:

看着是不是很别扭

接下使用seamlessClone看一下:

看着这样更自然很多,上面使用了normal_clone和max_clone两种模式,上述的例子看起来差别不大,但是有的例子差距就会很多,需要自己选择。

至此,使用cv2里面seamlessClone方式,应该熟悉了,代码如下:

import cv2
import numpy as np

b1=cv2.imread('b1.jpg')
b2=cv2.imread('b2.jpg')
b1=cv2.resize(b1,(256,256))
center_x=300
center_y=500

#normal_clone
mask = 255 * np.ones(b1.shape, b1.dtype)
normal_clone = cv2.seamlessClone(b1, b2, mask, (center_x+256,center_y-256), cv2.NORMAL_CLONE)
cv2.imshow('normal_clone',normal_clone)
#max_clone
max_clone = cv2.seamlessClone(b1, b2, mask, (center_x+256,center_y-256), cv2.MIXED_CLONE)
cv2.imshow('max_clone',max_clone)
#直接贴
b2[center_x-128:center_x+128,center_y-128:center_y+128]=b1
cv2.imshow('b2',b2)
cv2.waitKey(0)

 

你可能感兴趣的:(计算机视觉)