我正在尝试将图像拆分为较小的图像网格,以便可以分别处理每个较小的图像。为此,我意识到必须将每个小图像定义为ROI,并且可以从那里轻松使用它。
现在,我的网格大小不固定。即,如果用户输入5,则必须制作5x5的网格。
逐像素迭代图像会很慢,因此我决定使用Numpy通过以下结构来创建ROI:
#Assuming user entered grid size =5
roiwidth=w/5
roiheight=h/5
roi0=img[0:roiheight,0:roiwidth]
这将是我的第一篇文章。h和w分别是图像的高度和宽度。对于下一部分,我将要做:
roi1=img[0:roiheight,roiwidth+1:2*roiwidth]
我最后的投资回报率是:
roi25=img[4*roiheight+1:5*roiheight, 4*roiwidth+1:5*roiwidth]
但是我需要反复进行,并且无法找出正确的方法。我不想逐个像素地遍历图像,而是需要它是动态的
编辑:我现在这样迭代:
import cv2
import numpy
img=cv2.imread('01.jpg')
h,w,chan=img.shape
rh=h/5
rw=w/5
z={}
count=0
for i in range (0,5):
for j in range (0,5):
yl=i*rh
yh=(i+1)*rh
xl=j*rw
xh=(j+1)*rw
z[count]=img[yl:yh,xl:xh]
count=count+1
但是我不知道这是否是最有效的方法。
为了提高效率,下面列出了一种使用重塑和置换尺寸的矢量化方法。
1)让我们定义输入参数和设置输入:
M = 5 # Number of patches along height and width
img_slice = img[:rh*M,:rw*M] # Slice out valid image data
2)主要处理部分在这里。分割切片图像的前两个轴,以便我们M
通过重塑来创建两个长度分别为新的轴。因此,剩下的两个轴将代表window (rh x rw)
。我们的最终目标是使它们彼此相邻,以便为我们提供(rh,rw)
补丁,因此其他两个分割轴也将彼此相邻。为此,我们需要使用来替换尺寸np.transpose
。置换后,我们调整形状以合并长度的两个维度,(M,M)
以便最终得到一个长度轴M^2
,每个轴的元素将代表图像中的一个窗口。
所以,最后我们将有:
z = img_slice.reshape(M,rh,M,rw,-1).transpose(0,2,1,3,4).reshape(M**2,rh,rw,-1)
这使我们得到了一个NumPy数组,其中的M^2
元素沿第一个轴。沿该轴的每个切片将对应于每个窗口/面片。因此,z[0]
将是左上角的补丁,依此类推。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句