Python2.7中使用numpy.reshape进行图像分块切割

小石头
小石头
发布时间:2026-10-14| 6人浏览过
原创

本文介绍在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对图像进行切割的完整方法分享,希望能为读者提供参考,并欢迎大家继续支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。