如何从 Python 中的图像中读取文本颜色

How do I read color of text from image in Python

我正在构建一个可以从图像中读取文本的项目。我还需要确定此文本的书写颜色。图像是计算机生成的,并且始终由数字组成。 我正在使用 PyTesseract 进行 OCR 检测。谁能告诉我该怎么做?

Sample Image

例如,我的 python 代码中需要信息,例如 429.05 Green

我的代码如下

import pytesseract
import cv2

pytesseract.pytesseract.tesseract_cmd = "C:\Program Files\Tesseract-OCR\tesseract.exe"
img = cv2.imread("D:\test2.png")
text = pytesseract.image_to_string(img)

print(text)

这可以通过 Pillow 库来完成。

首先导入需要的库,使用getcolors方法获取色盘,按像素数升序排列。

from PIL import Image
i = Image.open("D:\test2.png")

colors = sorted(i.getcolors())

对于您的图像 colors 现在是一个元组列表,其中每个元组中的第一项是包含所述颜色的像素数,第二项是另一个表示 RGB 颜色代码的元组。

列表中的最后一项是像素最多的项目(白色):

>>> colors[-1]
(2547, (255, 255, 255))

倒数第二个可能是你想要的颜色:

>>> colors[-2]
(175, (76, 175, 80))

这可以是 converted to a hex code:

>>> '#%02x%02x%02x' % colors[-2][1]
'#4caf50'

并使用基于网络的十六进制选择器快速确认:

这对于您的测试图像来说看起来是正确的,但如果您处理的图像不同,您可能需要稍微调整一下。

感谢大家的支持。我裁剪了包含第一个字母的图像,然后按照@v25 的建议应用了步骤。下面是代码。

import pytesseract
from PIL import Image


pytesseract.pytesseract.tesseract_cmd = "C:\Program Files\Tesseract-OCR\tesseract.exe"
img = Image.open("D:\test1.png")

text = pytesseract.image_to_boxes(img).split(" ")
(left, upper, right, lower) = (int(text[1]),int(text[2])-8,int(text[3]),int(text[4])+8)
im_crop = img.crop((left, upper, right, lower))
colors = sorted(im_crop.getcolors())
hex = ('#%02x%02x%02x' % colors[-2][1])
color = None
if (hex == '#91949a'):
    color = "Black"
elif ( hex == '#4caf50'):
    color = "Green"
elif ( hex == '#ff9d9d'):
color= "Red"
number = pytesseract.image_to_string(img)
print("Number is: "+number+" Color is: "+color)