2017-09-17 54 views
0

我在写一个python程序来分类字母和数字。我已经写了分类器,并且我有我的数据集的图像。我真的没有太多的Python或使用图像的经验。 我的问题是如何用我拥有的图像创建我的数据集。如何创建一个像它们一样的数组。我应该创建一个每个图像的numpy数组吗?或者使用颜色直方图? 我可能会将所有图像转换为灰度。从图像中提取数字和字母特征

我发现了分类猫和狗的链接。它使用两种方法来提取图像特征,但我不知道这是否适用于我的情况。

k-nn-classifier-for-image-classification

任何人都可以指导我我可以提取我的图片的功能载体,例如,所以我可以在我的“dataset.data”文件写入这些数据?

我会用相似图片波纹管的图像:

Letter "e"

我甚至考虑调整图像大小32×32,创造如0和1表示图像的位图。

任何人都可以指导我,例如,我可以将我的图像的特征提取到矢量中,以便我可以将这些数据写入“dataset.data”文件中?

谢谢。

回答

1

你通常想要创建一个Numpy数组来保存所有的训练数据。这是常见的在它下面的形状安排:

X_train.shape = (N, img.shape[0], img.shape[1])

其中N是该组中的图像的数量。

这样,如果您使用单通道(灰度),X_train[i,:,:]将保存第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数据集作为一个例子。这里有一个example,但你应该继续,谷歌。

如果你想获得更好的结果,你可能会想看看神经网络。再次,有很多教程,这里有一个example using tensorflow