使用SVM对图像进行分类 @邹博

老师,您好!
 
    我碰到这样一个应用场景,需要对一些图片进行分类。
 
    总共有三个类别,A,B,C
    计划使用SVM做,之前看SVM做手写数字识别是可以的,但是像手写数字识别的加载图片,是直接通过sklearn中的dataset加载数据。
 
   但是我想要自己来做这个图片识别的话,这里的图片加载以及接下来的图片特征的处理应该怎么做呢
 
   多谢!

邹博 - 计算机科学博士,深谙机器学习算法原理

赞同来自: liuzhixin137 fish

这个可以参考下咱们SVM实践章节的代码呀,里面我正好是自己读取的图片,可以看看。 另外,我个人也建议用CNN试试,分类效果可能很好些。

liuzhixin137 - 见习魔法师

赞同来自:

777.png
  老师,您好! 如上图,这是SVM实践课程中的源代码,可以看到画框的几个位置。 您说的代码里面自己读取的图片,但是这里可以看到的就是读取到的是已经将图像矩阵转成了向量的csv文件或者是txt文件。 所以还请您确认一下。   另外,像手写数字这种图片,它的像素是固定的,但是我要使用训练的图片,图像的大小并不全一样,那我如何知道将这些图片转成多大的矩阵呢   多谢您了

liuzhixin137 - 见习魔法师

赞同来自:

大家好,这个图片读取的问题已经找到解决方法了。如下   可以按照如下方法,进行读取图片  
#将所有的图片resize成100*100
w=100
h=100
c=3
path='E:/flower/'
#读取图片
def read_img(path):
    cate=[path+x for x in os.listdir(path) if os.path.isdir(path+x)]
    imgs=[]
    labels=[]
    for idx,folder in enumerate(cate):
        for im in glob.glob(folder+'/*.jpg'):
            print('reading the images:%s'%(im))
            img=io.imread(im)
            img=transform.resize(img,(w,h))
            imgs.append(img)
            labels.append(idx)
    return np.asarray(imgs,np.float32),np.asarray(labels,np.int32)

data,label=read_img(path)
谢谢大家关注。也谢谢老师

要回复问题请先登录注册