如何从 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)
我正在构建一个可以从图像中读取文本的项目。我还需要确定此文本的书写颜色。图像是计算机生成的,并且始终由数字组成。 我正在使用 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)