如何通过opencv和python仅保留图像中具有特定颜色的文本?

jia*_*hou 3 text opencv image colors

我有一些发票图片有一些文字重叠,这给以后的处理带来了一些麻烦,而且我只有黑色的文字。有些我想删除其他颜色的文本。

有没有办法实现这一目标?

附上图片作为示例。

我试图用opencv解决它,但我仍然无法解决这个问题:

import numpy as np import cv2
img = cv2.imread('11.png')

lower = np.array([150,150,150]) 

upper = np.array([200,200,200])

mask = cv2.inRange(img, lower, upper) 
res = cv2.bitwise_and(img, img, mask=mask) 
cv2.imwrite('22.png',res)
Run Code Online (Sandbox Code Playgroud)

[多色图像][1]

[1]:https : //i.stack.imgur.com/nWQrV.pngstrong文本

Kin*_*t 金 5

文本更暗,饱和度更低。正如@JD 所建议的那样,HSV色彩空间很好。但是他的范围是错误的。

在 OpenCV 中,H 的范围在 [0, 180],而 S/V 的范围在 [0, 255]

这是我去年制作的颜色图,我认为它很有帮助。


(1) 使用 cv2.inRange

(2) 只是阈值V(HSV)通道:

th, threshed = cv2.threshold(v, 150, 255, cv2.THRESH_BINARY_INV)
Run Code Online (Sandbox Code Playgroud)

(3) 对S(HSV)通道进行阈值处理:

th, threshed2 = cv2.threshold(s, 30, 255, cv2.THRESH_BINARY_INV)
Run Code Online (Sandbox Code Playgroud)

结果:

在此处输入图片说明


演示代码:

# 2018/12/30 22:21 
# 2018/12/30 23:25 

import cv2 

img = cv2.imread("test.png")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h,s,v = cv2.split(hsv)

mask = cv2.inRange(hsv, (0,0,0), (180, 50, 130))
dst1 = cv2.bitwise_and(img, img, mask=mask)

th, threshed = cv2.threshold(v, 150, 255, cv2.THRESH_BINARY_INV)
dst2 = cv2.bitwise_and(img, img, mask=threshed)

th, threshed2 = cv2.threshold(s, 30, 255, cv2.THRESH_BINARY_INV)
dst3 = cv2.bitwise_and(img, img, mask=threshed2)

cv2.imwrite("dst1.png", dst1)
cv2.imwrite("dst2.png", dst2)
cv2.imwrite("dst3.png", dst3)
Run Code Online (Sandbox Code Playgroud)
  1. 如何使用 OpenCV 检测图像中的色块?

  2. 如何定义阈值以仅检测图像中的绿色对象:Opencv