山东大学软件学院2018级项目实训 第14周-图像修复/去水印
在现实的生活中,我们可能会遇到一些美好的或是珍贵的图片被噪声干扰,比如旧照片的折痕,比如镜头上的灰尘或污渍,更或者是某些我们想为我所用但有讨厌水印,我们可以通过调用opencv的框架来实现图像修复,或者在一些特定场景下去除水印的效果
1.实现原理
简单的来说就是对噪声的特征进行人为标定,在使用噪声周围的颜色特征推理出应该修复的图片的颜色,从而实现图片修复的。不过这样做也存在一定弊端:只能对特定的噪声进行去除,并且噪声的特点需要人为来标注
2.实现代码
def fun_pic_repair(instance):
print("图像修复/去水印")
img = instance.m_image
img = cv.cvtColor(img, cv.COLOR_RGB2BGR)
hight, width, depth = img.shape[0:3]
# 图片二值化处理,把[240, 240, 240]~[255, 255, 255]以外的颜色变成0
thresh = cv.inRange(img, np.array([240, 240, 240]), np.array([255, 255, 255]))
# 创建形状和尺寸的结构元素
kernel = np.ones((3, 3), np.uint8)
# 扩张待修复区域
hi_mask = cv.dilate(thresh, kernel, iterations=1)
specular = cv.inpaint(img, hi_mask, 5, flags=cv.INPAINT_TELEA)
# cv.namedWindow("Image", 0)
# cv.resizeWindow("Image", int(width / 2), int(hight / 2))
# cv.imshow("Image", img)
cv.namedWindow("newImage", 0)
cv.resizeWindow("newImage", int(width), int(hight))
cv.imshow("newImage", specular)
cv.waitKey(0)
函数实现并不复杂,thresh = cv.inRange(img, np.array([240, 240, 240]), np.array([255, 255, 255]))
我们把灰度值过高的部分设定为噪声
3.效果
去噪效果还是非常明显的!