【问题标题】:OpenCV - Python: How Do I split an Image in a grid?OpenCV - Python:如何在网格中分割图像?
【发布时间】:2014-06-11 22:07:12
【问题描述】:

我想将图像分割成 N*N 个正方形,以便我可以分别处理这些正方形。如何在 python 中使用 opencv 完成上述操作??

【问题讨论】:

    标签: python python-2.7 opencv image-processing


    【解决方案1】:

    通过将 OpenCV 图像作为 Numpy 二维数组操作来裁剪矩形是一种常见的做法:

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

    其余的都是微不足道的,在 OpenCV 范围之外。

    【讨论】:

      【解决方案2】:
      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)
      

      输出:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-24
        • 2018-11-29
        • 1970-01-01
        • 2018-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多