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()是一个阻塞函数。我不知道这意味着什么,但我把它放在这里以防万一它有助于解决案件。