OpenCV - Python: 如何将图像分割成网格?

8 投票
2 回答
10121 浏览
提问于 2025-04-18 04:19

我想把一张图片分成N*N的小方块,这样我就可以单独处理这些小方块。请问我该如何在Python中使用OpenCV来实现这个呢?

2 个回答

1
import matplotlib.pyplot as plt
import cv2
import numpy as np
%matplotlib inline
img = cv2.imread("painting.jpg")


def img_to_grid(img, row,col):
    ww = [[i.min(), i.max()] for i in np.array_split(range(img.shape[0]),row)]
    hh = [[i.min(), i.max()] for i in np.array_split(range(img.shape[1]),col)]
    grid = [img[j:jj,i:ii,:] for j,jj in ww for i,ii in hh]
    return grid, len(ww), len(hh)

def plot_grid(grid,row,col,h=5,w=5):
    fig, ax = plt.subplots(nrows=row, ncols=col)
    [axi.set_axis_off() for axi in ax.ravel()]

    fig.set_figheight(h)
    fig.set_figwidth(w)
    c = 0
    for row in ax:
        for col in row:
            col.imshow(np.flip(grid[c],axis=-1))
            c+=1
    plt.show()

if __name__=='__main__':
    row, col =5,15
    grid , r,c = img_to_grid(img,row,col)
    plot_grid(grid,r,c)

输出:

在这里输入图片描述

9

在使用OpenCV处理图像时,通常会把图像看作一个二维的Numpy数组,然后从中裁剪出一个矩形区域:

img = cv2.imread('sachin.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
roi_gray = gray[y:y+h, x:x+w]

剩下的部分就比较简单了,不在OpenCV的范围内。

撰写回答