颜色范围
color_dict_HSV = {'black': [[180, 255, 30], [0, 0, 0]],
'white': [[180, 18, 255], [0, 0, 231]],
'red1': [[180, 255, 255], [159, 50, 70]],
'red2': [[9, 255, 255], [0, 50, 70]],
'green': [[89, 255, 255], [36, 50, 70]],
'blue': [[128, 255, 255], [90, 50, 70]],
'yellow': [[35, 255, 255], [25, 50, 70]],
'purple': [[158, 255, 255], [129, 50, 70]],
'orange': [[24, 255, 255], [10, 50, 70]],
'gray': [[180, 18, 230], [0, 0, 40]]}
致谢:
阿里·哈什米安
使用OpenCV如何从图像中去除颜色
由于大多数人都需要这样做,例如我的情况是需要从图像中删除蓝色,我使用以下代码从图像中删除蓝色印章和蓝色勾号,以便在使用Tesseract进行正确的OCR。
[颜色去除] 代码
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
inputImage = cv2.imread('0.jpg')
grayscaleImage = cv2.cvtColor(inputImage, cv2.COLOR_BGR2GRAY)
hsvImage = cv2.cvtColor(inputImage, cv2.COLOR_BGR2HSV)
lowerValues = np.array([90, 50, 70])
upperValues = np.array([128, 255, 255])
bluepenMask = cv2.inRange(hsvImage, lowerValues, upperValues)
kernelSize = 3
opIterations = 1
morphKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (kernelSize, kernelSize))
bluepenMask = cv2.morphologyEx(bluepenMask, cv2.MORPH_CLOSE, morphKernel, None, None, opIterations, cv2.BORDER_REFLECT101)
colorMask = cv2.add(grayscaleImage, bluepenMask)
_, binaryImage = cv2.threshold(colorMask, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
cv2.imwrite('bwimage.jpg',binaryImage)
thresh, im_bw = cv2.threshold(binaryImage, 210, 230, cv2.THRESH_BINARY)
kernel = np.ones((1, 1), np.uint8)
imgfinal = cv2.dilate(im_bw, kernel=kernel, iterations=1)
cv2.imshow(imgfinal)
BEFORE [原始图像]
![Original Image](https://istack.dev59.com/kUliE.webp)
蓝色标记抽取
![Blue Tick Marks Determined](https://istack.dev59.com/4SraP.webp)
最终图像
![enter image description here](https://istack.dev59.com/WJt9i.webp)
在这里,您可以看到几乎去除了所有的勾号,原因是始终有改进的空间,但似乎这已经是我们能够得到的最好结果,因为即使去除这些小标记也不会对使用Tesseract的OCR产生深刻影响。
希望这可以帮助!