文章目录
图片分类的思路和需要加载的库函数说明
图片分类的基本思路如下
- 首先需要有一个标注好图片里面花朵名称的数据集,例如命名好的
rose.png
- 特征提取,即提取图片中的重要特征(能区别于其他图片的特征),并把重要特征加工成可以训练的数据,因为每种花的颜色分布不同,这里的思路是计算图片的彩色直方图信息,作为图片的特征。
- 标签提取,即把图片标注加工成数值信息,这里的思路是把图片的字符串名字转换成唯一的数字序列。
- 挑选一个分类器模型,例如随机森林分类器,然后划分训练集和测试集进行训练,得到学习器,即分类模型。
- 用这个训练好的模型,对图片进行分离,即利用模型预测。
需要使用的库函数和功能说明
# 标签处理
from sklearn.preprocessing import LabelEncoder
# 随机森林分类器模型
from sklearn.ensemble import RandomForestClassifier
# 对数据集进行有效划分的方法,划分成训练集和测试集
# from sklearn.cross_validation import train_test_split
# 在python新版本中,train_test_split被移动到model_selection中
from sklearn.model_selection import train_test_split
# 分类器性能评估报告
from sklearn.metrics import classification_report
# 基本矩阵运算库
import numpy as np
# 文件操作模块,主要是进行文件搜索和通配符操作
import glob
# opencv函数库
import cv2
核心代码分析
数据预处理:文件处理和命名匹配
glob函数使用参考:python glob model - 漩涡鸣人 - 博客园
# 加载所有的图片和蒙版
imagePath = "dataset/images"
maskPath = "dataset/masks"
# 利用sorted函数实现名字的一一对应,对每个图片进行蒙版的加载
imagePaths = sorted(glob.glob(imagePath + "/*.png"))
maskPaths = sorted(glob.glob(maskPath + "/*.png"))
数据预处理:特征提取和标签提取
# 计算直方图,返回的是均一化之后的彩色直方图数据
features = desc.describe(image,mask)
# 构造测试数据集的特征信息集合
data.append(features)
# 注意图片的命名格式为"image_crocus_0001.png",我们需要提取的"crocus"是倒数第二个
target.append(imagePath.split("_")[-2])
# 初始化一个打标签的对象
le = LabelEncoder()
# 对target进行数字化标签index(因为字符串这种特征是不能直接拿来训练的,需要转换成唯一的数值)
target = le.fit_transform(target)
标签处理:unique()
和fit_transform()
的用法
target = ["happy","birthday","happy","wedding",