从图像

时间:2017-09-17 21:46:30

标签: python opencv scikit-image

我写了一个python程序来分类字母和数字。我已经写了分类器,我有我的数据集的图像。我真的不具备python或使用图像方面的经验。 我的问题是如何用我拥有的图像创建我的数据集。如何创建具有它们形状的数组。我应该只创建每个图像的numpy数组吗?或者使用颜色直方图? 我可能会将所有图像转换为灰度。

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

k-nn-classifier-for-image-classification

任何人都可以指导我,我可以将我的图像的功能提取到矢量,例如,所以我可以在我的" dataset.data"文件?

我将使用如下图像的图像:

Letter "e"

我甚至考虑过将图片大小调整为32x32,并创建一个代表图像的0和1位图。

任何人都可以指导我,我可以将我的图像的功能提取到矢量,例如,所以我可以在我的" dataset.data"文件?

谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

我想你可能正在寻找这个:

http://www.scipy-lectures.org/advanced/scikit-learn/

Sklearn是一个非常容易学习的机器学习包,有很多教程。 希望它有所帮助,