当前位置:   article > 正文

图像处理-opencv去水印(如有图片侵权,请及时联系)_opencv去水印算法

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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)为相匹配的特征点
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/975415
推荐阅读
相关标签
  

闽ICP备14008679号