python - 如何在 Python 中从图像中读取文本的颜色
问题描述
我正在构建一个可以从图像中读取文本的项目。我还需要确定这段文字是用哪种颜色书写的。图像是计算机生成的,并且总是由数字组成。我正在使用 PyTesseract 进行 OCR 检测。谁能向我建议我该怎么做?
比如说我需要我的 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))
然后可以将其转换为十六进制代码:
>>> '#%02x%02x%02x' % colors[-2][1]
'#4caf50'
并使用基于 Web 的十六进制选择器快速确认:
这对于您的测试图像看起来是正确的,但是如果您正在处理的图像不同,您可能需要稍微调整一下。
推荐阅读
- xml - 我想将整个数组保存为 codeigniter 上的日志文件
- javascript - 创建和调用辅助/可重用函数
- sql - XQuery - 动态交换属性和元素值(逆向结构)
- ios - 从后台计时器更新标签
- c++ - 空列表迭代器比较总是正确的
- c++ - gtkmm & glade - 多个窗口不工作
- haskell - 为什么`2 + x = 7`有效的Haskell?
- java - 如何从具有字符串成员数组列表的类中填充列表视图?
- sqlite - SQLite 数据库显示问号 (???) 而不是这些 Unicode 字符 (தமிழ்)
- go - 是否可以在项目基础上开发 Go?(没有 gopath)