上次写了一篇关于GAN缺陷生成的图片的,发现大家的对这个根本不感兴趣,可能是用于在座的各位觉得样本有的是,我为什么还苦哈哈的去生成啊,说的也不是没有道理,可能只是我搞了更加苦哈哈的工业深度学习吧,所以这种技术才显得格外感兴趣,最讨厌听到的客户说,你要那么多图片干什么,谁谁家的软件就不需要这么多图片。直接大写的无语。既然大家都不感兴趣,那我就换个话题。
那我们就来说一说缺陷图片和正常图片无缝融合(反正GAN生成的了的缺陷还是要和正常图片融合),先来看看大家理解的几种融合。
1.cv2.addWeighted(img1,0.5,img2,0.5,0)
这种其实就是img1,img2两张图片对应像素对应加权得到新的像素值,也就img = img1 *0.5 + img2 *0.5 ,img1就是第一张这样,img2就是下图的咩咩狗,img合成后就像下面第三张图的效果
代码如下
img1 = cv2.imread(r'C:\Users\admin\Desktop\1.jpg')
img2 = cv2.imread(r'C:\Users\admin\Desktop\2.jpg')
img2 = cv2.resize(img2,(img1.shape[1],img1.shape[0]))
finall_img = cv2.addWeighted(img1,0.5,img2,0.5,0)
cv2.imshow('finall_img',finall_img)
cv2.waitKey(0)
2.基于mask的替换融合
我们先上效果图,可以看到合成效果图,如果我们的mask画的不够好的话,合成的图就有违和感
代码实现如下
mg1 = cv2.imread(r'C:\Users\admin\Desktop\1.jpg')
img2 = cv2.imread(r'C:\Users\admin\Desktop\2.jpg')
img2_mask = cv2.imread(r'C:\Users\admin\Desktop\2_mask.png')
#将img2_mask 以0 padding到img1的大小
img2_mask = cv2.copyMakeBorder(img2_mask,0,img1.shape[0]-img2_mask.shape[0],0,img1.shape[1]-img2_mask.shape[1],cv2.BORDER_CONSTANT,value=0)
#将img2 以0 padding到img1的大小
img2 = cv2.copyMakeBorder(img2,0,img1.shape[0]-img2.shape[0],0,img1.shape[1]-img2.shape[1],cv2.BORDER_CONSTANT,value=0)
img1[img2_mask == 255] = img2[img2_mask == 255]
cv2.imshow('img1',img1)
cv2.waitKey(0)
3.cv2.seamlessClone
我们先上效果图,可以看到合成效果图比之前都好了很多,也自然了很多,这是就是泊松融合,但当然如果你的mask画的越精细,效果就越优秀
代码如下
img1 = cv2.imread(r'C:\Users\admin\Desktop\1.jpg')
img2 = cv2.imread(r'C:\Users\admin\Desktop\2.jpg')
img2_mask = cv2.imread(r'C:\Users\admin\Desktop\2_mask.png')
img = cv2.seamlessClone(img2,img1,img2_mask,(150,230),cv2.NORMAL_CLONE)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.seamlessClone这个函数具体的使用方法可以参考以下链接
Seamless Cloning using OpenCV ( Python , C++ ) | (learnopencv.com)https://learnopencv.com/seamless-cloning-using-opencv-python-cpp/好了,目前应该还有比泊松融合更加优秀的图片融合方法,可能ps上就是用的这个算子吧,不过ps应该已经进入了AIGC时代了,这中小卡拉米的技术应该看不上了吧。
好了,已经很久没写博客了,写起来还是感觉有点累的,最后也不知道到底有没有人看,这种文章感觉会淹没了,毕竟没几行代码,大家估计不过瘾
至此,敬礼,salute!!!!
老规矩,上咩咩图