版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Bigat/article/details/80889636
我们可以将一些logo图案加在其他的图像上,这和图像的按比重加法的不同之处在于按比重加法是整体的加法,要求比较多,而在本节内容中,则主要是提取一些特征来实现加法,实用性更强,首先来对比一下这两者的差别。
图1 图像按比重混合(左)图像前景背景混合(右)
实现的过程(代码网上较多,本文就不附代码)
1. 获取前景图像的特征轮廓(logo部分)
将前景图像转为灰度图像,然后进行二值化(确保logo与背景在灰度图中像素值差异明显,提取的效果才会好)
-
img2gray=cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
#将图像转为灰度图
-
ret,mask=cv2.threshold(img2gray,
242,
255,cv2.THRESH_BINARY)
#第二个参数为阈值,第三个参数为高于阈值取值结果,第四个是阈值方法
ret值存放的是阈值,mask存放二值图,我们希望logo部分的值为0,这样和背景图做与运算时,logo部分就会保留(为0)
图2 logo二值化后
2. logo二值化后与背景图做与运算
这样做的结果就是在背景图中,logo部分的像素值均会为0
图3 logo二值化后与背景图上的ROI区域做与运算
3. 对logo的二值化图取反,将其与logo图做与运算
结果就和上一步相反,logo图中的特征部分保留,其背景被消除
图4 logo图二值化取反后与logo原图与运算
4. 上两步的结果相加
相加后,我们希望的结果就实现了!然后,将这一部分复制到我们原图的对应部分(ROI区域)
图5 相加后的结果
5. 对图像中的噪点进行滤波
5.1对取得logo的边缘后对其滤波(在最终相加前)
图 6 对logo部分滤波(均值滤波,核矩阵大小为5*5)
滤波后,图像边缘噪点要少,但图像模糊化了,在猫的眼睛部分尤其明显,采用小的核矩阵效果会好一些,但在边缘处的处理有不如前者。
5.2 对相加后的结果滤波
图7 相加后对图像滤波
对比两者(相加前和相加后滤波),可以发现后者在对边缘的处理效果要好,噪点少,更加平滑。后续的可以结合其他的滤波方法,来对比效果,选择最佳的滤波方法。
参考文献:OpenCV官方文档(中文版) for python