首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将OpenCV图像传递给蟒蛇中的Tesseract?

如何将OpenCV图像传递给蟒蛇中的Tesseract?
EN

Stack Overflow用户
提问于 2015-05-22 19:42:56
回答 1查看 12K关注 0票数 7

鉴于Python代码调用Tesseract并使用ctype库,选项1中的映像由Tesseract加载,工作正常!问题在选项2中,当我试图传递由OpenCV加载的图像时,Tesseract返回垃圾:

代码语言:javascript
复制
from ctypes import *
import cv2

class API(Structure):
    _fields_ = []

lang = "eng"
ts = cdll.LoadLibrary("c:/Tesseract-OCR/libtesseract302.dll")
ts.TessBaseAPICreate.restype = POINTER(API)
api = ts.TessBaseAPICreate()
rc = ts.TessBaseAPIInit3(api, 'c:/Tesseract-OCR/', lang)

##### Option #1
out = ts.TessBaseAPIProcessPages(api, 'c:/Tesseract-OCR/doc/eurotext.tif', None, 0)
print 'Option #1 => ' + string_at(out)

##### Option #2
#TESS_API void  TESS_CALL TessBaseAPISetImage(TessBaseAPI* handle, const unsigned char* imagedata, int width, int height,
#                                             int bytes_per_pixel, int bytes_per_line);

im = cv2.imread('c:/Temp/Downloads/test-slim/eurotext.jpg', cv2.COLOR_BGR2GRAY)
c_ubyte_p = POINTER(c_ubyte)
##ts.TessBaseAPISetImage.argtypes = [POINTER(API), c_ubyte_p, c_int, c_int, c_int, c_int]
ts.TessBaseAPISetImage(api, im.ctypes.data_as(c_ubyte_p), 800, 1024, 3, 800 * 3)
out = ts.TessBaseAPIGetUTF8Text(api)
print 'Option #2 => ' + string_at(out)

产出如下:

选项1 => (快速)棕色{fox}跳跃!超过43,456.78 #90狗鸭/鹅,因为12.5%的电子邮件来自aspammer@website.com是垃圾邮件。�braune Fuchs springt�ber den断层匈奴。雷纳德·布伦·拉皮德( Le renard brun )拉沃尔普·马龙·拉普达·萨尔塔,女高音,手杖。El zorro marr(n r,c.pido salta sobre el perro perezoso )A raposa marrom rzipida salta sobre o cé�o preguicoso. 选项2 => 7?:5:*:>\–-;2欧元”;i3E::;i3“.i:ii欧元˜;3;™f-i%:-欧元™:;?:=欧元™:=£<:7‘i§5.<:欧元”\欧元“;:=é:’—..=.:a,';2’:3‘:3_3:l.':—‘:—:£€:-_’:§3;;%§%ai5~«:é::3%ia»€E:

备注:

  • 我尝试过python-tesseract和紧密的库,它们都是好的。 够了,但缺少文件
  • 这里我使用opencv.imread,以便有可能将数学算法应用到矩阵上。

有什么想法吗?如何将OpenCV图像(即numpy.ndarray)传递给Tesseract?任何帮助都是有用的。

EN

回答 1

Stack Overflow用户

发布于 2016-10-29 17:58:37

我在python 3中使用这个:(bw_img是一个numpy.ndarray)

代码语言:javascript
复制
import numpy as np
import cv2
from PIL import Image
import pytesseract

...

(thresh, bw_img) = cv2.threshold(bw_img, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
...

img = Image.fromarray(bw_img)
txt = pytesseract.image_to_string(img)
print(txt)
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30404756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档