OpenCV - Python: 如何将图像分割成网格?
我想把一张图片分成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的范围内。