Python 如何将Numpy数组(图像)拆分为平铺以进行迭代?

Python 如何将Numpy数组(图像)拆分为平铺以进行迭代?,python,arrays,numpy,opencv,image-processing,Python,Arrays,Numpy,Opencv,Image Processing,我有一个Numpy数组类型的图像,我想分成9(3 x 3)个平铺,我可以迭代。我该怎么做 以下是我到目前为止生成numpy.ndarray的代码,但我还没有将其拆分: 要拆分的numpy图像阵列为th1 导入cv2 将numpy作为np导入 #仅用于阈值显示 从matplotlib导入pyplot作为plt #要使用的图像 图像='six.png' #求平均灰度值 image\u bgr=cv2.imread(图像,cv2.imread\u颜色) #计算每个通道的平均值 通道=cv2.平均值(图

我有一个Numpy数组类型的图像,我想分成9(3 x 3)个平铺,我可以迭代。我该怎么做

以下是我到目前为止生成numpy.ndarray的代码,但我还没有将其拆分:

要拆分的numpy图像阵列为th1

导入cv2
将numpy作为np导入
#仅用于阈值显示
从matplotlib导入pyplot作为plt
#要使用的图像
图像='six.png'
#求平均灰度值
image\u bgr=cv2.imread(图像,cv2.imread\u颜色)
#计算每个通道的平均值
通道=cv2.平均值(图2)
#类型浮动
阈值=通道[0]/2
#打印(脱粒)
#显示阈值
img=cv2.imread(图像,0)
img=cv2.medianBlur(img,5)
#如果在下面,则为黑色或白色
ret,th1=cv2.阈值(img,thresh,255,cv2.thresh_二进制)
标题=['原始图像','全局阈值']
图像=[img,th1,ret]
对于范围(2)中的i:
plt.subplot(2,2,i+1),plt.imshow(图像[i],'gray')
标题(标题[i])
plt.xticks([]),plt.yticks([])
#单独显示单个图像
plt.imshow(图像[1],“灰色”)
plt.xticks([]),plt.yticks([])
以下是图片(six.png):


我要做的是创建一个列表或二维数组,在其中保存完整图像的“分幅”。将使用以下代码复制磁贴:

height, width, dim = img.shape
image_tile = img[0:height/3, 0:width/3]
它将创建一个新的Ndaray image_磁贴,其中包含位于坐标内的完整图像数组的一部分。在本例中,它是左上角的平铺

带有for循环的整个示例如下所示:

image_tile = []
for i in range(0,3):
    for j in range(0,3):
        image_tile.append(img[i * height/3:(i+1) * height/3, j * width/3:(j+1) * width/3])

我希望这对你有帮助,祝你好运

我找到了一个从其他地方改编的解决方案,效果非常好

img = th1
numrows, numcols = 3, 3
height = int(img.shape[0] / numrows)
width = int(img.shape[1] / numcols)
for row in range(numrows):
    for col in range(numcols):
        y0 = row * height
        y1 = y0 + height
        x0 = col * width
        x1 = x0 + width
        individual =  (img[y0:y1, x0:x1])
        plt.imshow(individual, 'gray')
        plt.xticks([]),plt.yticks([])
        plt.show()

嗨@Grgur,你能再解释一下吗。例如,我将如何处理我的具体案例,并将其切割成9块瓷砖。我对python的这一领域相当陌生,因此更多的代码将非常有用。谢谢,我在回答问题的时候没有明白你的意思,所以我没有举一个详细的例子。是否要调整图像大小,使每个平铺的尺寸为3x3,是否只需要9个大小相同的数组?他要求对所有9个区域的切片边界进行完整计算。谢谢@Grgurdamiani看到你上传了答案。我觉得你用更少的线就能达到同样的效果。你能试试并告诉我它是否有效吗?非常感谢。你没有为那些不是被你的块平均分割的图像大小做任何准备——只是一个注释——只要你意识到这一点并且它适合你的需要就可以了。在这种情况下,您不会沿右边缘处理2个像素。