关于opencv-python:基于OpenCV的人脸视频文字检测以及识别的项目四-图片修复

36次阅读

共计 1153 个字符,预计需要花费 3 分钟才能阅读完成。

1. 图片修复

用 opencv 实现图片修复 基本原理在于:咱们本人标定噪声的特色,而后依据噪声四周区域的色彩特色修复噪声所在的区域
有句话说的很贴切 忘了在哪听的了:
用邻近的像素替换那些坏标记,使其看起来像是街坊
比方这位

要去除这个白框框 次要步骤:

(1)标定噪声特色

先剖析红色框框特色,红色区域的值大略处于 [240,240, 240]~[255, 255, 255] 之间 图片中其余区域很少有这么高的像素值 所以咱们能够把这个红色区域提取进去 示意为前景区域 而后对其收缩
opencv 给咱们提供了一个 api , 用 cv2.inRange 进行二值化解决,cv2.inRange 用法如下

把 low-up 之间的值变为 255 以外的值变成 0(跟大津法阈值不同)
后果如下:(把灯也当做噪点了)

(2)扩大噪声区域 优化解决成果

cv2.dliate

(3)图像修复

间接用 opencv 的 api cv2.inpaint 函数 用法如下:
就是在原图根底上 把 mask 中前景区域局部的图像依据 flags 指定的办法 进行修复

后果:

再试一个:

总的来说 这玩意次要是靠 opencv 外面 cv2.inpaint 这个函数实现
一句话 对于这个红色框框:找到它 干掉它!

(4)代码

代码如下

# 图片修复

import cv2
import numpy as np

path = "./6t.jpg"

img = cv2.imread(path)
hight, width, depth = img.shape[0:3]

# 图片二值化解决,把 [240, 240, 240]~[255, 255, 255] 以外的色彩变成 0
thresh = cv2.inRange(img, np.array([240, 240, 240]), np.array([255, 255, 255]))
cv2.imshow("2", thresh)
# 创立形态和尺寸的构造元素
kernel = np.ones((5, 5), np.uint8)

# 扩张待修复区域
# dliate 参数:原图 内核 侵蚀次数
hi_mask = cv2.dilate(thresh, kernel, iterations=1)
cv2.imshow("3", hi_mask)
# inpaint
specular = cv2.inpaint(img, hi_mask, 5, flags=cv2.INPAINT_TELEA)

cv2.namedWindow("Image", 0)
cv2.imshow("Image", img)

cv2.namedWindow("newImage", 0)
cv2.imshow("newImage", specular)
cv2.waitKey(0)
cv2.destroyAllWindows()

一看到这 我就想起来各位男同胞们心心念念的马赛克技术
我这个代码去不掉马赛克 因为马赛克区域的 RGB 值 不是 240-255 之间
马赛克待我钻研钻研再说

正文完
 0