嗨,我正试着用OCR识别这个数字样本https://drive.google.com/folderview?id=0B68PDhV5SW8BTjd0T0FqTG94cG8&usp=sharing
我做了一个数字的数据库,我拍了1号,2号,3号的截图。。。。。。。在
稍后为了识别数字,我截图并与数据库截图进行比较。在
代码工作效率很高,但我有一个懒惰的问题,数字可能是0.00到999.99,所以我需要拍所有这些截图,我不能创建数字,所以我想我需要找到其他解决方案。在
我想如果我能打破截图。(100.99=100和99)我只需要999个样本在我的数据库。在
所以你认为这是个好办法?在
新闻!!! 我继续寻找,终于找到了解决办法
很少的事情,我需要调整图像的高度到最小25像素100%的好结果。在
如果我用png格式保存图像不工作,但与jpg工作完美。 如果我打开png图像与油漆和保存没有改变没有任何代码工作完美与png图像。我不明白。在
我真的需要工作与png,因为我需要代码工作快。 有没有办法用png格式解决这个问题?在
import pytesseract
from PIL import Image
x = pytesseract.image_to_string(Image.open('101.jpg'))
y = float(x)
print y
搜索有关图像分割的代码,找到轮廓和连接的组件。 我找到了这个代码来找出数字和点的区域。在
在0,1,6,8和dot中发现了1个区域,在其他区域中找到了2个区域。在
我不能改变我的图像工作代码(数字白背景黑,),所以我改变我的图像颜色,我看到不可能的编辑代码,以解决问题的区域。在
谢谢你的帮助
我想我不需要修改代码,如果我能把每个区域保存在不同的图像中,我可以这样做。在
^{pr2}$import sys
from PIL import Image, ImageDraw
class Region():
def __init__(self, x, y):
self._pixels = [(x, y)]
self._min_x = x
self._max_x = x
self._min_y = y
self._max_y = y
def add(self, x, y):
self._pixels.append((x, y))
self._min_x = min(self._min_x, x)
self._max_x = max(self._max_x, x)
self._min_y = min(self._min_y, y)
self._max_y = max(self._max_y, y)
def box(self):
return [(self._min_x, self._min_y), (self._max_x, self._max_y)]
def find_regions(im):
width, height = im.size
regions = {}
pixel_region = [[0 for y in range(height)] for x in range(width)]
equivalences = {}
n_regions = 0
#first pass. find regions.
for x in xrange(width):
for y in xrange(height):
#look for a black pixel
if im.getpixel((x, y)) == (0, 0, 0, 255): #BLACK NUMBERS FOR WHITE NUMBER USE (255, 255, 255, 255)
# get the region number from north or west
# or create new region
region_n = pixel_region[x-1][y] if x > 0 else 0
region_w = pixel_region[x][y-1] if y > 0 else 0
max_region = max(region_n, region_w)
if max_region > 0:
#a neighbour already has a region
#new region is the smallest > 0
new_region = min(filter(lambda i: i > 0, (region_n, region_w)))
#update equivalences
if max_region > new_region:
if max_region in equivalences:
equivalences[max_region].add(new_region)
else:
equivalences[max_region] = set((new_region, ))
else:
n_regions += 1
new_region = n_regions
pixel_region[x][y] = new_region
#Scan image again, assigning all equivalent regions the same region value.
for x in xrange(width):
for y in xrange(height):
r = pixel_region[x][y]
if r > 0:
while r in equivalences:
r = min(equivalences[r])
if not r in regions:
regions[r] = Region(x, y)
else:
regions[r].add(x, y)
return list(regions.itervalues())
def main():
im = Image.open(r"0.png")
regions = find_regions(im)
draw = ImageDraw.Draw(im)
for r in regions:
draw.rectangle(r.box(), outline=(255, 0, 0))
del draw
#im.show()
output = file("output.png", "wb")
im.save(output)
output.close()
if __name__ == "__main__":
main()
目前没有回答
相关问题 更多 >
编程相关推荐