我正在编写一个Python程序来对字母和数字进行分类。我已经写了分类器,并且为数据集提供了图像。我真的没有太多在Python或使用图像的经验。我的问题是如何使用我拥有的图像来创建数据集。如何像阵列一样用它们的形状创建。我应该只创建每个图像的数组吗?还是使用颜色直方图?我可能会将所有图像转换为灰度。
我发现链接对猫和狗进行了分类。它使用两种方法来提取图像功能,但我不知道这是否适用于我的案件。
k-nn-clalerifier-for-image-classification
任何人都可以指导我,例如,我可以将图像的功能提取到向量,以便我可以在" dataset.data"文件中写入此数据?
我将使用图像bellow之类的图像:
字母" e"
我什至考虑过将图像调整为32x32,并像代表图像的0和1的位图一样创建。
任何人都可以指导我,例如,我可以将图像的功能提取到向量,以便我可以在" dataset.data"文件中写入此数据?
谢谢。
您通常需要创建一个numpy阵列来保存所有培训数据。通常以以下形状排列它:
X_train.shape = (N, img.shape[0], img.shape[1])
其中n是集合中的图像数。
这样,如果您使用的是单个通道(灰度),则X_train[i,:,:]
将保持"图像像素"的值。请注意,建议将这些值归一化,但这取决于您选择训练的模型。
这是如何创建这样的构建数组的快速示例:
import numpy as np
import cv2
X = np.zeros((N, IMG_SIZE[0], IMG_SIZE[1]), dtype=np.float32)
y = np.zeros((N))
for idx, img_path in enumerate(images_path):
img = cv2.imread(img_path)
assert ((img.shape[0], img.shape[1]) == IMG_SIZE)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
X[idx, :, :] = gray
y[idx] = # label of this image
# if you wish to normalize:
X = (X/255.0) - 0.5
有许多用于数字分类器的教程许多通常以MNIST数据集为例。这是一个例子,但是您应该继续进行谷歌搜索。
如果您想取得更好的结果,则可能想研究神经网络。同样,那里有许多教程,这是一个使用TensorFlow的示例。
我认为您可能正在寻找:
http://www.scipy-lectures.org/advanced/scikit-learn/
Sklearn是一个非常容易学习的机器学习包,并带有许多教程。希望它有帮助,