适用范围
1、python机器学习库scikit learn
2、有监督/无监督
代码组成
1、裁剪图片建立初始图像数据集
2、将图像数据集转换为可以训练的模式
我们在运用机器学习算法对图像进行分类、识别时,是将二维矩阵拉成一维向量。sklearn提供的手写字符数据集由data和target两部分组成。
from sklearn import datasets
MNIST = datasets.load_digits()
print MNIST.data.shape,MNIST.target.shape
print type(MNIST.data),type(MNIST.target)
可以看到data是一个1797 * 64 的ndarray数组,target是 1797 *1 的ndarray数组。说明一共有1797张图片,每张图片是由64个像素组成。我们的目标是将自己的图像数据集中的每一张图片变成一个向量,将所有向量组成一个ndarray的数组。
参考
python+OpenCV 鼠标交互图片切割矩形区域
https://www.jianshu.com/p/5f7df3d8b237
笔者只是在参考的代码上做了小小改动,将只能截取一次变成可以截取多次。
效果演示
1、截取图片
2、图片保存
我们在这里截取两张图片为例,然后按ESC键退出程序
截取的图片就被保存在相应的文件夹中
3、代码释义
注意在运用代码的过程中有些地方是需要自己进行改动的,我已在下面的代码部分进行说明
# -- coding: utf-8 --
import cv2
global img
global point1, point2
# 要截取的图片的大小(根据情况自行改动)
width =50
height =50
# 要截取的图片的路径 (我是与py文件放在同一级,要根据自己情况进行改动)
imgpath='img.jpg'
#获取鼠标事件的函数
def on_mouse(event, x, y, flags, param):
flag = 1
global img, point1, point2,count
img2 = img.copy()
# while (flag):
if event == cv2.EVENT_LBUTTONDOWN: # 左键点击
point1 = (x, y)
cv2.circle(img2, point1, 10, (0, 255, 0), 5)
cv2.imshow('image', img2)
elif event == cv2.EVENT_MOUSEMOVE and (flags & cv2.EVENT_FLAG_LBUTTON): # 按住左键拖曳
cv2.rectangle(img2, point1, (x, y), (255, 0, 0), 5)
cv2.imshow('image', img2)
elif event == cv2.EVENT_LBUTTONUP: # 左键释放
point2 = (x, y)
cv2.rectangle(img2, point1, point2, (0, 0, 255), 5)
cv2.imshow('image', img2)
min_x = min(point1[0], point2[0])
min_y = min(point1[1], point2[1])
cut_img = img[min_y:min_y + width, min_x:min_x + height]
#文件存放路径与文件名(根据自己情况进行改动)
cv2.imwrite('smaple\\%s_remote'%(count) + '.bmp', cut_img)
count = count + 1
print count
def main():
global img,count
count =2000
img = cv2.imread(imgpath)
cv2.namedWindow('image')
# while(1):
cv2.setMouseCallback('image', on_mouse)
while(1):
cv2.imshow('image', img)
#27是ESC的ASCII码,表示只有按下ESC键才会关闭窗口
if (cv2.waitKey(0) == 27):
break;
if __name__ == '__main__':
main()
要注意的地方
1、文件名,由于接下来对数据集提取target(类别)是建立在文件名的基础上,所以请保持原有格式进行改动
格式 1000_name.jpg
1000中的1是表示类别,及count要赋予的初始值,count会在此基础上自动计数,不改变类别。如果要截取不同类别的,需要为count赋予其他的初值,如2000,3000
2、由于所处理的图像数据大小应该一致,所以在width与height时是写死的,不用担心所截图的大小是否超出预期
这部分就不再详细介绍只说明使用的方法
使用说明
1、在文件头部引入相应的py模块
2、运用函数
image_datasets()
输入:数据集所在的文件夹
输出:data ,target
from sklearn_data import *
path = "sample\\"
data,target = image_datasets(path)
即可获得sklearn可以运用的数据集
希望可以帮助到大家,代码放在了git上,欢迎大家使用
https://github.com/nanbei629/build_datasets