Python2.7中使用numpy.reshape进行图像分块切割
本文介绍在Python2.7环境下,利用numpy.reshape函数对灰度图像进行分块处理的方法。重点解析shape参数中order选项('C'与'F')对元素重排顺序的影响,并通过h=300, w=300, patchsize=100的具体案例,展示如何正确计算输出维度及避免常见的reshape错误,实现按Z轴顺序叠放小块。
图像分块切割需求与原理
面临这样一个实际需求:需要将图片按照指定的patchsize进行切块,随后按照z轴顺序将这些小块堆叠起来,具体效果可参考下图(此处仅针对灰度图像进行讨论)。

假设原始图片im的尺寸为(h,w),设定的patchsize为(ph,pw)。经过处理后,新数据的尺寸变为(ph,pw,w*h/ph/pw)。为了简化表述,这里假设图像尺寸可以被patchsize整除。
为便于理解,后续示例中设定h=300,w=300,ph=100,pw=100。在此条件下,处理后的深度维度d等于9。
numpy.reshape参数order详解
关于numpy.reshape函数的详细文档说明,请点击链接查看。
需要特别注意的是第三个参数order,其默认值为order='C',这意味着在reshape过程中,最后一个维度的元素会优先被重新排列位置。而当设置order='F'时,情况则相反,第一个维度的元素会优先被重排。
具体示例如下,执行上述操作后得到的im2即为这样一个tensor结构。
代码实现与常见错误分析
import cv2
import numpy as np
im=cv2.imread('animal007.jpg',cv2.IMREAD_GRAYSCALE)
h= 300
w= 300
patchsize=100
d=h*w/patchsize/patchsize
print d
#crop the image to h x w
im=np.array(im[: h ,: w ])
#this gets wrong answer
im_wrong1=im.reshape((patchsize,patchsize,-1))
im_wrong7= im.reshape((patchsize,patchsize,-1),order='F')
im_wrong2=im.reshape(( h ,patchsize,-1)).reshape((patchsize,patchsize,-1))
im_wrong3=im.reshape((patchsize, w ,-1)).reshape((patchsize,patchsize,-1))
im_wrong4= im.reshape(( h ,patchsize,-1),order='F').reshape((patchsize,patchsize,-1))
im_wrong5= im.reshape(( h ,patchsize,-1),order='F').reshape((patchsize,patchsize,-1),order='F')
im_wrong6= im.reshape((patchsize, w ,-1),order='F').reshape((patchsize,patchsize,-1),order='F')
#this only works for h=w, i dont know why
im2= im.reshape((patchsize, w ,-1),order='F').reshape((patchsize,patchsize,-1))
im2_0=im2[:,:,no]
cv2.imwrite('im2_0.jpg',im2_0)
no=4;
imw=im_wrong1[:,:,no]
cv2.imwrite('imw1_0.jpg',imw)
imw=im_wrong2[:,:,no]
cv2.imwrite('imw2_0.jpg',imw)
imw=im_wrong3[:,:,no]
cv2.imwrite('imw3_0.jpg',imw)
imw=im_wrong4[:,:,no]
cv2.imwrite('imw4_0.jpg',imw)
imw=im_wrong5[:,:,no]
cv2.imwrite('imw5_0.jpg',imw)
imw=im_wrong6[:,:,no]
cv2.imwrite('imw6_0.jpg',imw)
imw=im_wrong7[:,:,no]
cv2.imwrite('imw7_0.jpg',imw)
以上就是在Python2.7中利用numpy.reshape对图像进行切割的完整方法分享,希望能为读者提供参考,并欢迎大家继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









