使用python突出显示图像中的特定文本

Posted

技术标签:

【中文标题】使用python突出显示图像中的特定文本【英文标题】:Highlighting specific text in an image using python 【发布时间】:2019-06-04 13:28:06 【问题描述】:

我想在网站截图中突出显示特定的单词/句子

截取屏幕截图后,我使用pytesseractcv2 提取文本。这很好用,我可以获得有关它的文本和数据。

import pytesseract
import cv2


if __name__ == "__main__":
    img = cv2.imread('test.png')
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    result = pytesseract.image_to_data(img, lang='eng', nice=0, output_type=pytesseract.Output.DICT)
    print(result)

使用结果对象,我可以找到所需的单词和句子。

问题是如何回到图像并突出显示那些词?

我应该查看其他库还是有办法获取像素值然后突出显示文本?

理想情况下,我想获得每个单词的开始和结束坐标,怎么做?

【问题讨论】:

【参考方案1】:

您可以使用pytesseract.image_to_boxes 方法获取图像中标识的每个字符的边界框位置。如果需要,您还可以使用该方法在某些特定字符周围绘制边界框。下面的代码在我识别的图像周围绘制了矩形。

import cv2
import pytesseract
import matplotlib.pyplot as plt

filename = 'sf.png'

# read the image and get the dimensions
img = cv2.imread(filename)
h, w, _ = img.shape # assumes color image

# run tesseract, returning the bounding boxes
boxes = pytesseract.image_to_boxes(img)use
print(pytesseract.image_to_string(img)) #print identified text

# draw the bounding boxes on the image
for b in boxes.splitlines():
    b = b.split()
    cv2.rectangle(img, ((int(b[1]), h - int(b[2]))), ((int(b[3]), h - int(b[4]))), (0, 255, 0), 2)

plt.imshow(img)

【讨论】:

太棒了,这很有帮助。我仍在努力寻找输出结构的答案。你有什么参考吗? @Califlower “输出结构”的含义?你是说pytesseract.image_to_boxes的输出吗? pytesseract.image_to_boxespytesseract.image_to_data 的输出我不得不盯着它看了几个小时才能弄清楚数字的结构和含义。例如,thatword_num 在每个line_num 上重新启动枚举,每个line_numblock_num 重新启动。仍然不确定par_num 是什么意思。 @Califlower 您能否在图像中突出显示特定的单词,如果可以,您也可以帮助我吗? 嘿,我实际上在做一个非常相似的任务,我只是对一个特定的文本感兴趣,我设法在它周围创建了一个蒙版......我想找回颜色文本,但到目前为止,我希望我可以计算字符矩形的平均颜色并尝试比较这些值。感谢您的解决方案?

以上是关于使用python突出显示图像中的特定文本的主要内容,如果未能解决你的问题,请参考以下文章

突出显示 JTextArea 中的特定文本 - Java

在选择文本选项中突出显示特定文本的颜色

使用 .maphilight() 突出显示图像的特定区域

PDF 在图像上方/文本下方突出显示

如何在python网络浏览器中突出显示文本,如查找文本

正在寻找一种在 textareas 中突出显示特定单词的方法?