使用 OpenCV Python 将图像分割成相等的部分


Python OpenCV 库使我们能够利用各种图像处理工具,例如图像分类、人脸/物体检测、跟踪等等。

在本文中,我们将使用 python 列表切片或 numpy 数组切片技术将图像分割成相等的部分,因为 OpenCV-python 使用 Numpy 数组来存储图像数据/像素值。

输入输出场景

假设我们有一个输入图像,在输出中,我们将看到给定图像的等分部分。

方法

我们将遵循以下步骤将图像分割成相等的部分。

  • 加载图像。

  • 提取图像尺寸并将其存储在变量中。

  • 使用 python 切片技术分割图像数组。

  • 最后保存分割的部分。

示例

在此示例中,我们将水平将输入图像“cat.jpg”分成 2 部分。

import cv2
image= cv2.imread('Images/cat.jpg')

height, width, channels = image.shape
half_height = height//2

top_section = image[:half_height, :]
bottom_section = image[half_height:, :]

cv2.imshow('Top', top_section)
cv2.imshow('Bottom', bottom_section)

cv2.waitKey(0)

输入图像

输出图像

示例

在此示例中,我们将输入图像“logo.png”分成 4 个相等的部分。

import cv2
import numpy as np
def divide_img_blocks(img, n_blocks=(2,2)):
   horizontal = np.array_split(img, n_blocks[0])
   splitted_img = [np.array_split(block, n_blocks[1], axis=1) for block in horizontal]
   return np.asarray(splitted_img, dtype=np.ndarray).reshape(n_blocks)

result = divide_img_blocks(cv2.imread('Images/logo.png'))

for i in range(result.shape[0]):
   for j in range(result.shape[1]):
      cv2.imwrite(f"Output Images/my_block_{i}_{j}.jpg", result[i,j])

输入图像

输出图像

示例

在此方法中,我们将输入图像“Lenna.png”分成 9 个相等的部分。

import cv2,time

img = cv2.imread('Images/Lenna.png')
img2 = img

height, width, channels = img.shape
# Number of pieces Horizontally 
W_SIZE  = 3 
# Number of pieces Vertically to each Horizontal  
H_SIZE = 3

for ih in range(H_SIZE ):
   for iw in range(W_SIZE ):
   
      x = width/W_SIZE * iw 
      y = height/H_SIZE * ih
      h = (height / H_SIZE)
      w = (width / W_SIZE )
      print(x,y,h,w)
      img = img[int(y):int(y+h), int(x):int(x+w)]
      NAME = str(time.time()) 
      cv2.imwrite("Output Images/" + str(ih)+str(iw) +  ".png",img)
      img = img2

输出

0.0 0.0 124.0 223.0
223.0 0.0 124.0 223.0
446.0 0.0 124.0 223.0
0.0 124.0 124.0 223.0
223.0 124.0 124.0 223.0
446.0 124.0 124.0 223.0
0.0 248.0 124.0 223.0
223.0 248.0 124.0 223.0
446.0 248.0 124.0 223.0

输入图像

输出图像

上面的示例将图像首先分成 3 个水平部分,然后对于这 3 个部分中的每一个,它将裁剪另外 3 个图像,总共留下 9 个部分。更改W_SIZEH_SIZE值以调整我们需要将图像分割成多少个相等的部分。

在以上所有示例中,我们都已成功将输入图像分割成相等的部分。

更新于: 2023年5月30日

6K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告