我是靠谱客的博主 强健小丸子,最近开发中收集的这篇文章主要介绍图像处理-opencv去水印(如有图片侵权,请及时联系),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1,图片去除水印处理

方法,利用opencv可以直接采用如下方法步骤处理

1.1 采用SIFT算子提取图片特征点
尺度不变特征转换SIFT是一种著名的计算机视觉的算法,主要用来检测图像中的局部特征,通过在图像中寻找极值点特征,并提取出其这些特征点的位置、尺度和旋转不变量等信息。
其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对。
关于SIFT算子具体可以参看博客:http://blog.csdn.net/liyuefeilong/article/details/44166069

1.2 采用高维数据最近邻算法FLANN,找出两张图片中得距离最近特征点
关于FLANN,可以参看博客:http://blog.csdn.net/jinxueliu31/article/details/37768995

2,具体流程以及关键代码如下

以搜房网图片为例
原图:
原图

2.1 制作原图水印模板
水印模板图片

2.2 获取原图以及模板图得特征点信息

queryImage = cv2.imread(query_image_name)#原图
sift = cv2.SIFT()
kp1, des1 = sift.detectAndCompute(queryImage, None)
trainImage = cv2.imread(template_image_name)#模板图
kp2, des2 = sift.detectAndCompute(trainImage, None)

2.3 采用FLANN算法

FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
search_params = dict(checks=50)
# or pass empty dictionary
flann = cv2.FlannBasedMatcher(index_params, search_params)
matches = flann.knnMatch(des1, des2, k=2)
# 找出相匹配的特征点
for m, n in matches:
if m.distance < 0.75 * n.distance:#其中0.7参数可调
x1 = kp1[m.queryIdx].pt[0]
y1 = kp1[m.queryIdx].pt[1]
x2 = kp2[m.trainIdx].pt[0]
y2 = kp2[m.trainIdx].pt[1]
//(x1,y1)(x2,y2)为相匹配的特征点

2.3 通过匹配的特征点可以找出原图与模版图的位置,按照SIFT尺度不变特性,可以确定原图中logo是否与模版图有缩放,此处代码略去
将模板图缩放后制作一张与原图大小一样的图,并将模板放于相应的原图水印位置,理解为遮罩图,如下
遮罩图

2.4 采用inpaint函数对原图在遮罩图水印位置进行图像修补,处理后图如下图所示
水印处复原后图片

2.5 可以看出,图片复原效果并不十分完美,在水印位置可以采用 cv2.GaussianBlur进行高斯模糊处理,处理后如下图所示
高斯模糊处理后

至此图片去水印处理完成
另外,通过SIFT算子进行原图以及模板图特征点匹配时,可能涉及多处匹配,这将涉及相关规则调參

最后

以上就是强健小丸子为你收集整理的图像处理-opencv去水印(如有图片侵权,请及时联系)的全部内容,希望文章能够帮你解决图像处理-opencv去水印(如有图片侵权,请及时联系)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部