使用python突出显示图像中的特定文本
Posted
技术标签:
【中文标题】使用python突出显示图像中的特定文本【英文标题】:Highlighting specific text in an image using python 【发布时间】:2019-06-04 13:28:06 【问题描述】:我想在网站截图中突出显示特定的单词/句子。
截取屏幕截图后,我使用pytesseract
和cv2
提取文本。这很好用,我可以获得有关它的文本和数据。
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_boxes
和pytesseract.image_to_data
的输出我不得不盯着它看了几个小时才能弄清楚数字的结构和含义。例如,thatword_num
在每个line_num
上重新启动枚举,每个line_num
从block_num
重新启动。仍然不确定par_num
是什么意思。
@Califlower 您能否在图像中突出显示特定的单词,如果可以,您也可以帮助我吗?
嘿,我实际上在做一个非常相似的任务,我只是对一个特定的文本感兴趣,我设法在它周围创建了一个蒙版......我想找回颜色文本,但到目前为止,我希望我可以计算字符矩形的平均颜色并尝试比较这些值。感谢您的解决方案?以上是关于使用python突出显示图像中的特定文本的主要内容,如果未能解决你的问题,请参考以下文章