0

私はこの例に気をつけています: http://scikit-learn.org/stable/auto_examples/plot_digits_classification.html#example-plot-digits-classification-py scikit-learn python ライブラリの手書きの数字。

3D 配列 (N * a* b) を準備したいと思います。ここで、N は画像番号 (75) で、a* b は画像の行列です (例の 8x8 形状のように)。私の問題は次のとおりです。画像ごとに異なる形状の記号があります: (202, 230), (250, 322).. そして、このエラーが発生します: ValueError: 配列の次元は、このコードの d_0 を除いて一致する必要があります:

#here there is the error:
grigiume = np.dstack(listagrigie)
print(grigiume.shape)
grigiume=np.rollaxis(grigiume,-1)
print(grigiume.shape)

すべての画像のサイズを標準サイズ (つまり 200x200) に変更する方法や、matrix(a,b) で a != from b の 3 次元配列を使用する方法があり、このコードでエラーが発生しないようにする方法があります。

data = digits.images.reshape((n_samples, -1))
classifier.fit(data[:n_samples / 2], digits.target[:n_samples / 2])

私のコード:

import os
import glob
import numpy as np
from numpy import array
listagrigie = []

path = 'resize2/'
for infile in glob.glob( os.path.join(path, '*.jpg') ):
    print("current file is: " + infile )
    colorato = cv2.imread(infile)
    grigiscala = cv2.cvtColor(colorato,cv2.COLOR_BGR2GRAY)
    listagrigie.append(grigiscala)

print(len(listagrigie))

#here there is the error:
grigiume = np.dstack(listagrigie)
print(grigiume.shape)
grigiume=np.rollaxis(grigiume,-1)
print(grigiume.shape)


#last step
n_samples = len(digits.images)
data = digits.images.reshape((n_samples, -1))

# Create a classifier: a support vector classifier
classifier = svm.SVC(gamma=0.001)

# We learn the digits on the first half of the digits
classifier.fit(data[:n_samples / 2], digits.target[:n_samples / 2])

# Now predict the value of the digit on the second half:
expected = digits.target[n_samples / 2:]
predicted = classifier.predict(data[n_samples / 2:])

print "Classification report for classifier %s:\n%s\n" % (
classifier, metrics.classification_report(expected, predicted))
print "Confusion matrix:\n%s" % metrics.confusion_matrix(expected, predicted)

for index, (image, prediction) in enumerate(
    zip(digits.images[n_samples / 2:], predicted)[:4]):
    pl.subplot(2, 4, index + 5)
    pl.axis('off')
    pl.imshow(image, cmap=pl.cm.gray_r, interpolation='nearest')
    pl.title('Prediction: %i' % prediction)

pl.show()
4

1 に答える 1

1

すべての画像のサイズを固定サイズに変更する必要があります。たとえばImage、PILまたはPillowのクラスを使用します。

from PIL import Image
image = Image.open("/path/to/input_image.jpeg")
image.thumbnail((200, 200), Image.ANTIALIAS)
image.save("/path/to/output_image.jpeg")

編集:上記は機能しません、代わりに試してくださいresize

from PIL import Image
image = Image.open("/path/to/input_image.jpeg")
image = image.resize((200, 200), Image.ANTIALIAS)
image.save("/path/to/output_image.jpeg")

編集2:アスペクト比を維持し、残りを黒いピクセルで埋める方法があるかもしれませんが、いくつかのPIL呼び出しで行う方法がわかりません。PIL.Image.thumbnailただし、numpyを使用してパディングを行うこともできます。

于 2012-12-20T14:49:11.970 に答える