概述
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去水印(如有图片侵权,请及时联系)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复