'文件'numArEx.txt文件'加载

2024-04-27 01:00:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我在测试一个我在互联网上看到的代码,但我遇到了一些问题。我想得到一个关于为什么我的档案不能正确打开的答案,它停留在加载和加载,我不能查看发生了什么。正确的值应该是有许多介于0和255(RGB颜色)之间的数字。我想问题出在功能上np.设置错误(over='ignore')'但是如果排除这个,那么我还有另一个问题,所以,我不知道。代码do:标识数据库中的图像。提前谢谢。你知道吗

代码:

from PIL import Image
from matplotlib import pyplot as plt
import numpy as np
import time
from collections import Counter

np.seterr(over='ignore')

def createExamples():
    numberArrayExamples=open('numArEx.txt','a')
    numbersWeHave=range(1,3)
    versionsWeHave=range(1,10)

    for eachNum in numbersWeHave:
        for eachVer in versionsWeHave:
        #print str(eachNum)+'.'+str(eachVer)
        imgFilePath = 'images/'+str(eachNum)+'.'+str(eachVer)+'.jpg'
        ei=Image.open(open(imgFilePath,'rb'))
        eiar=np.array(ei)
        eiar1=str(eiar.tolist())

        lineToWrite=str(eachNum)+'::'+eiar1+'\n'
        numberArrayExamples.write(lineToWrite)

def threshold(imageArray):
    balanceAr = []
    newAr = imageArray
    for eachRow in imageArray:
        for eachPix in eachRow:
            avgNum = reduce(lambda x, y: x + y, eachPix[:3]) / eachPix[:3])
            balanceAr.append(avgNum)
    balance = reduce(lambda x, y: x + y, balanceAr) / len(balanceAr)
    for eachRow in newAr:
        for eachPix in eachRow:
            if reduce(lambda x, y: x + y, eachPix[:3]) / eachPix[:3]) > balance:
                eachPix[0] = 255
                eachPix[1] = 255
                eachPix[2] = 255
            else:
                eachPix[0] = 0
                eachPix[1] = 0
                eachPix[2] = 0
    return newAr

def whatNumIsThis(filePath):
    matchedAr=[]
    loadExamps=open('numArEx.txt','r').read()
    loadExamps=loadExamps.split('\n')

    i=Image.open(open(filePath,'rb'))
    iar=np.array(i)
    iar1=iar.tolist()

    inQuestion=str(iar1)

    for eachExample in loadExamps:
        try:
            splitEx=eachExample.split('::')
            currentNum=splitEx[0]
            currentAr=splitEx[1]
            eachPixEx = currentAr.split(']')
            eachPixInQ=inQuestion.split(']')
            x=0
            while x<len(eachPixEx):
                if eachPixEx[x]==eachPixInQ[x]:
                    matchedAr.append(int(currentNum))
                x+=1
        except Exception as e:
            print(str(e))

    print matchedAr
    x=Counter(matchedAr)
    print (x)
    print (x[0])

whatNumIsThis('images/teste.jpg')

Tags: 代码inimportfornpopensplitprint
1条回答
网友
1楼 · 发布于 2024-04-27 01:00:41

我假设您的代码基于项目here

很难说到底是什么坏了,因为我无法访问您正在使用的JPEG文件(原始项目使用PNG文件)。你知道吗

但是,以下版本的代码确实适用于GitHub项目中提供的PNG文件,这些文件存储在您可以看到的相同目录结构中(以图像/数字形式)。我已经删除了threshold()函数,因为它没有被调用。你知道吗

希望你能以此为出发点。你知道吗

from PIL import Image
from matplotlib import pyplot as plt
import numpy as np
import time
from collections import Counter

def createExamples():
    numberArrayExamples=open('numArEx.txt','w')  # replace, do not append
    numbersWeHave=range(1,3)
    versionsWeHave=range(1,10)

    for eachNum in numbersWeHave:
        for eachVer in versionsWeHave:
            #print str(eachNum)+'.'+str(eachVer)
            imgFilePath = 'images/numbers/'+str(eachNum)+'.'+str(eachVer)+'.png'
            ei=Image.open(open(imgFilePath,'rb'))
            eiar=np.array(ei)
            eiar1=str(eiar.tolist())

            lineToWrite=str(eachNum)+'::'+eiar1+'\n'
            numberArrayExamples.write(lineToWrite)
    numberArrayExamples.close()

def whatNumIsThis(filePath):
    matchedAr=[]
    loadExamps=open('numArEx.txt','r').read()
    loadExamps=loadExamps.split('\n')

    i=Image.open(open(filePath,'rb'))
    iar=np.array(i)
    iar1=iar.tolist()

    inQuestion=str(iar1)

    for eachExample in loadExamps:
        if len(eachExample) > 3:
            splitEx=eachExample.split('::')
            currentNum=splitEx[0]
            currentAr=splitEx[1]
            eachPixEx = currentAr.split(']')
            eachPixInQ=inQuestion.split(']')
            x = 0
            while x<len(eachPixEx):
                if eachPixEx[x]==eachPixInQ[x]:
                    matchedAr.append(int(currentNum))
                x+=1

    print (matchedAr)
    x=Counter(matchedAr)
    print (x)

createExamples()
whatNumIsThis('images/test.png')
whatNumIsThis('images/test1.png')

相关问题 更多 >