OpenCV之图片修复(inpaint)

图片修复基本原理: 我们自己标定噪声的特征,然后根据噪声周围区域的颜色特征修复噪声所在的区域。通俗一点就是用邻近的像素替换那些坏标记,使其看起来像是邻居。

如下图,需要将白色框框去掉:

标定噪声特征

先分析白色框框特征,白色区域的值大概处于240, 240, 240~255, 255, 255之间 图片中其他区域很少有这么高的像素值 所以我们可以把这个白色区域提取出来 表示为前景区域 然后对其膨胀

opencv给我们提供了一个api ,用cv2.inRange进行二值化处理,cv2.inRange 用法如下

把 low-up之间的值变为255 以外的值变成0

结果如下:

扩展噪声区域 优化处理效果

cv2.dliate

图像修复

直接用opencv的api cv2.inpaint函数 用法如下:

就是在原图基础上 把mask中前景区域部分的图像根据 flags指定的方法 进行修复

结果:

总的来说 这玩意主要是靠opencv里面cv2.inpaint这个函数实现.

代码

代码如下

复制代码
# 图片修复

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()
相关推荐
爱吃苹果的梨叔几秒前
AI 算力监控中心怎么建?分布式坐席 + 大屏联动 + 过程回放
人工智能·分布式·python
JarmanYuo1 分钟前
YOLO 涨点研究(六):网络结构改进之小目标增强篇1——无人机视角下的车辆与行人检测
人工智能·pytorch·python·yolo·计算机视觉·无人机
格林威4 分钟前
C# 相机图像阴影校正:使用OpenCvSharp实现工业相机阴影平场校正功能
人工智能·数码相机·opencv·计算机视觉·c#·机器视觉·工业相机
桃西西呀7 分钟前
9月1日起AI图要被标记了,机器怎么一眼认出哪张是 AI 画的?
人工智能·机器学习·llm
招财小梗11 分钟前
沈阳AI企业咨询可定制数字化方案吗?
大数据·人工智能·python
其实防守也摸鱼13 分钟前
教育信息技术应用创新---基础软件信息赛(题库)
大数据·运维·人工智能·web安全·自动化
Zzj_tju13 分钟前
Prompt Injection 防御:隔离不可信上下文的最小复现
人工智能·深度学习·机器学习·自然语言处理·prompt
合合技术团队13 分钟前
论文解读|合合信息与上海交通大学打造DocIQ模型,AI为文档图像质量“做体检”
人工智能·计算机视觉
Superzhangaa13 分钟前
太希智能全栈自研背后的机器人逻辑
人工智能·机器人·开源
枫叶丹419 分钟前
小模型与本地 Agent:不是更小的替代品,而是新的系统分工
人工智能·chatgpt·agent·codex