由于这些格子大小均匀,所以可以使用常规的除法,先裁剪出第一个格子:
e=a[:,:,0].shape
f=a[0:int(e[0]/9),0:int(e[1]/9)]
io.imsave('00.png',f)
下图是等比例放大的效果图。
第一列第二个格子:
m=1
n=0
f=a[int(m*e[0]/9):int((m+1)*e[0]/9),int(n*e[1]/9):int((n+1)*e[1]/9)]
第一行第二个格子:
m=0
n=1
f=a[int(m*e[0]/9):int((m+1)*e[0]/9),int(n*e[1]/9):int((n+1)*e[1]/9)]
这样,用for循环,可以实现全部裁剪:
for m in range(9):
for n in range(9):
f=a[int(m*e[0]/9):int((m+1)*e[0]/9),int(n*e[1]/9):int((n+1)*e[1]/9)]
io.imsave('0/'+str(m)+'-'+str(n)+'.png',f)
去除边界的黑框,只保留数字或空白:
for m in range(9):
for n in range(9):
f=a[int(m*e[0]/9)+10:int((m+1)*e[0]/9)-10,int(n*e[1]/9)+10:int((n+1)*e[1]/9)-10]
io.imsave('0/'+str(m)+'-'+str(n)+'.png',f)
批量获取图片:
keras 多张图片:
很多情况下,你并不能使用以上这些方法来直接输入数据去训练或者预测,原因是你的数据集太大了,没办法把所有的图片都载入到内存当中。那keras的data generator就派上用场了,当你的模型需要训练数据的时候,generator会自动从cpu生成一批图片,喂到GPU里面让模型进行训练,依次循环,直到训练结束。
压缩数据中维度为1的维度, numpy.squeeze()
模型是不能直接对图片进行卷积操作的,必须先转化为numpy数组才能输入模型里面去,而且如果数据集的图片尺寸不统一,也有不同的操作细节。
keras 模型保存路径: C:\Users\你的用户名.keras\models
notop代表是否包括顶层的全连接层,默认include_top=True,包括全连接层。
tf -- tensorflow 或者 CNTK
th -- theano
需要使用Python Imaging Library,下代是python2.x的代码:
from itertools import izipimport Image
i1 = Image.open("image1.jpg")
i2 = Image.open("image2.jpg")
assert i1.mode == i2.mode, "Different kinds of images."
assert i1.size == i2.size, "Different sizes."
pairs = izip(i1.getdata(), i2.getdata())
if len(i1.getbands()) == 1:
# for gray-scale jpegs
dif = sum(abs(p1-p2) for p1,p2 in pairs)
else:
dif = sum(abs(c1-c2) for p1,p2 in pairs for c1,c2 in zip(p1,p2))
ncomponents = i1.size[0] * i1.size[1] * 3
print "Difference (percentage):", (dif / 255.0 * 100) / ncomponents