Java + opencv 实现图片修复 (图片去水印)
一、效果展示
如效果图显示运行结果, 左边为原图, 右边为去水印(修复)后的图片. 可以看到原图中的 '你可以的 你是棒棒的小汪汪' 文字水印被去除掉了, 但是也可以明显的看到, 狗子眼里的白色光芒也被一起去掉了. 所以,本篇教程并不适用于所有的图片去水印, 至于如何局部去水印, 后面再说.
二、技术实现思路
图片转换成灰色(降低为一维的灰度,减低计算强度)
对灰度图片进行高斯模糊操作, 这里进行高斯模糊的作用就是减少图像噪声, 降低细节层次,往深一点的原理, 这里不作探讨
对高斯模糊之后的图像进行二值化操作, 图像二值化是将图像上的像素点的灰度值设置为 0 或 255, 也就是将整个图像呈现出明显的黑白效果, 图像的二值化使得图像变得简单, 而且数据量减小, 能凸显出目标轮廓. 在本文这里的作用是将 255 以外的颜色变为 0, 所以就呈现出明显的黑白效果. 非黑即白.
创建一个合理的形状和尺寸的结构元素
对二值化后的图像进行膨胀处理, 扩张待修复的区域.
进行图像修复(去水印)处理. 图片修复的原理简单来说就是标定噪声的特征, 在使用噪声周围的颜色特征推理出应该修复的图片的颜色, 从而实现图片修复.
三、pom 引入的 jar 包说明
说明: 有些 ffmpeg 的包根据自己情况进行删减.
复制代码
复制代码
四、具体实现代码
(1)、图片转换成灰色
使用 OpenCV 的 cvtColor() 转换图片颜色
复制代码
(2)、灰色图高斯模糊
复制代码
(3)、二值化处理
复制代码
(4)、创建尺子和形状
复制代码
(5)、二值化后的图像进行膨胀处理, 扩张待修复的区域
复制代码
(6)、图像修复
复制代码
五、完整实现代码
复制代码
六、报错问题解决
windows 下运行报错请参考往期文章
版权声明: 本文为 InfoQ 作者【张音乐】的原创文章。
原文链接:【http://xie.infoq.cn/article/8f983e116aaac6c65fd528cb3】。未经作者许可,禁止转载。
评论