首先,我想使用鼠标事件裁剪图像,然后打印裁剪图像中的文本。我尝试了OCR脚本,但都不能为下面的图片工作。我认为原因是文本在蓝色背景上有白色字符
你能帮我做这个吗
完整图像:
裁剪图像:
我尝试的一个例子是:
import pytesseract
import cv2
import numpy as np
pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
img = cv2.imread('D:/frame/time 0_03_.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
adaptiveThresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 35, 30)
inverted_bin=cv2.bitwise_not(adaptiveThresh)
#Some noise reduction
kernel = np.ones((2,2),np.uint8)
processed_img = cv2.erode(inverted_bin, kernel, iterations = 1)
processed_img = cv2.dilate(processed_img, kernel, iterations = 1)
#Applying image_to_string method
text = pytesseract.image_to_string(processed_img)
print(text)
[编辑]
对于任何想知道的人来说,问题中的图片是在发布我的答案后更新的。这是原始图像:
因此,以下是我原始答案中的输出
这是最新发布的图片:
具体的土耳其语字符,特别是最后一个单词,仍然没有被正确检测到(因为我现在仍然不能使用
lang='tur'
),但至少可以使用Ö
和Ü
检测到,我安装了lang='deu'
:[/EDIT]
我不会在这里使用
cv2.adaptiveThreshold
,而是使用cv2.THRESH_OTSU + cv2.THRESH_BINARY_INV
简单的cv2.threshold
。因为逗号触及图像边框,所以我会通过cv2.copyMakeBorder
添加另一个像素宽的边框来正确捕捉逗号。因此,这将是完整的代码(替换\f
仅是因为我的pytesseract
版本):输出对我来说似乎是正确的——当然,对于这个特殊的(我假设是土耳其语)大写字母I和上面的点不是这样的。不幸的是,我无法运行
pytesseract.image_to_string(..., lang='tur')
,因为它根本没有安装。也许,看看这个,也能找到合适的角色相关问题 更多 >
编程相关推荐