opencv去除图片中指定颜色的线条

1、背景

        现阶段工作内容需要,本人需要对一些数据进行处理,去除图像上被绘制的文字与特定颜色的线条,在此对其进行记录,以便后续回顾(小白总结)。

2、知识点

重要的事提前说:

rgb色彩空间虽然是被广泛接受的色彩空间,但我们不能够直接通过其值感知具体的色彩。hsv色彩空间提供了这样的方式,在此处我们使用hsv通道对颜色进行筛选,如果一定想使用rgb,可以逐个像素点遍历,但不建议这么做!

将图片转换为hsv通道的图像

img = cv2.cvtColor(image, code=cv2.COLOR_BGR2HSV) 
利用函数将颜色阈值内的像素变为255,其余为0
mask = cv2.inRange(img, lower, upper)
利用cv2.dilate()函数对图片进行膨胀处处理,避免去除区域不完整
kernel = np.ones((3, 3), np.uint8)
dilate1 = cv2.dilate(mask, kernel, iterations=2)
选取掩膜区域(要筛选的颜色区域)
 cv2.bitwise_and(frame, frame, mask=dilate1)
自动根据给定的掩膜(mask)来修复图像,即用图像中的其他部分来填充掩膜部分的像素
dst_TELEA1 = cv2.inpaint(image, dilate1, 2, cv2.INPAINT_TELEA)

3、实践

以下是本人使用到的(单一)颜色阈值范围:

本人使用的单一颜色hsv阈值
颜色hhssvv
红色011125225120255
绿色4193150255123255
蓝色90110200255220255
紫色13516082255145180

如果需要对全部颜色识别可查看完整hsv阈值表

以绿色为例: 

# 颜色空间转换
img2 = cv2.cvtColor(image, code=cv2.COLOR_BGR2HSV)

# 在HSV里面设置上下限
lower_green = np.array([41, 150, 123])
upper_green = np.array([93, 255, 255])
kernel = np.ones((3, 3), np.uint8)

# inRange 表示是否在范围内,在则为255,不在则为0
mask = cv2.inRange(img2, lower_green, upper_green)
dilate1 = cv2.dilate(mask, kernel, iterations=2)
# 按位与运算
cv2.bitwise_and(frame, frame, mask=dilate1)
# 去除mask区域
dst_TELEA1 = cv2.inpaint(frame, dilate1, 2, cv2.INPAINT_TELEA)

4、制作hsv查看工具

思路:鼠标取点获取颜色-->转换为hsv值,大家已经总结的很好了,在此推荐以下,我看到的:

获得单一点的rgb和hsv值可参考:基于python鼠标点击获取当前像素的RGB和HSV对应值-CSDN博客

获取图像的某个颜色的hsv值区域。可参考:

opencv-hsv_tools: 一个基于Qt实现的Opencv HSV阈值编辑器

以上为去除线段的全部内容,感谢您耐心看到这里,手动鞠躬~

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值