来自同一功能的不同结果(numpy,OCR)

时间:2015-03-26 12:05:46

标签: python numpy matplotlib ocr captcha

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

我正在使用Python 3.4.1编写一个程序来分析某种类型的验证码。 这是我遇到问题的部分。

def f(path):
    i = Image.open(path)
    a = np.array(i) #to transform the image into an array using numpy
    b = combinator(a) #this is a function I created to process the image (thresholding...)
    capreader(b) #this is a function that divides the array and recognizes the character in each segment (I created previously functions for each character)

现在我打电话给f()寻找路径' p'它给了我一定的结果(这是错误的)。当我单独调用f()中的每个指令时,它会给我一个其他结果(这是正确的):

i = Image.open('p')
ia = np.array(i)
ib = combinator(ia)
capreader(ib)

这太奇怪了!因为我认为从逻辑上讲它们应该给出相同的结果。 然后我试着看看f()内部,如果它不在f()内,则数组b是相同的:

def x(path):
    i = Image.open(path)
    a = np.array(i)
    b = combinator(a)
    print(np.array_equal(b,ib)

,结果是假的。 然后我测试了这个:

def y(path):
    i = Image.open(path)
    a = np.array(i)
    b = combinator(a)
    plt.imshow(b)
    plt.show()
    capreader(b)

这次(关闭pyplot窗口后)capreader()给了我正确答案!! 所以我继续测试,这一次是这样的:

def test(path):
    a = Image.open(path)
    b = np.array(a)
    c = combinator(b)
    print(np.array_equal(c,ib)) #False
    plt.imshow(c)
    plt.show()
    print(np.array_equal(c,ib)) #True
    capreader(c)

我不明白发生了什么以及如何解决它。显然,这里产生差异的是两个比较之间的plt函数,它给出了相反的结果(False,True)。我在互联网上读到plt.show()是一个阻塞函数。我不知道这意味着什么,但我把它放在这里以防万一它有助于解决案件。

0 个答案:

没有答案