当前位置:   article > 正文

使用OpenCV将图片切割成小图 及图片拼接(附python代码)_cv2切割图片

cv2切割图片

要分割的图片如下:

在这里插入图片描述

1. 图片切割

思路也比较简单,代码注释比较详细,看代码就行。

from cv2 import cv2
import numpy as np
import os
 
pic_path = '.jpg' # 分割的图片的位置
pic_target = './result/' # 分割后的图片保存的文件夹
if not os.path.exists(pic_target):  #判断是否存在文件夹如果不存在则创建为文件夹
    os.makedirs(pic_target)
#要分割后的尺寸
cut_width = 512
cut_length = 512
# 读取要分割的图片,以及其尺寸等数据
picture = cv2.imread(pic_path)
(width, length, depth) = picture.shape
# 预处理生成0矩阵
pic = np.zeros((cut_width, cut_length, depth))
# 计算可以划分的横纵的个数
num_width = int(width / cut_width)
num_length = int(length / cut_length)
# for循环迭代生成
for i in range(0, num_width):
    for j in range(0, num_length):
        pic = picture[i*cut_width : (i+1)*cut_width, j*cut_length : (j+1)*cut_length, :]      
        result_path = pic_target + '{}_{}.jpg'.format(i+1, j+1)
        cv2.imwrite(result_path, pic)
 
print("done!!!")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

效果如下:

在这里插入图片描述

2. 图片拼接

有了分割好的图片之后,后面可能还要进行拼接,拼接相对复杂一些。

from cv2 import cv2
import numpy as np
import os
# 分割后的图片的文件夹,以及拼接后要保存的文件夹
pic_path = '/result/'
pic_target = 'picture/'
# 数组保存分割后图片的列数和行数,注意分割后图片的格式为x_x.jpg,x从1开始
num_width_list = []
num_lenght_list = []
# 读取文件夹下所有图片的名称
picture_names =  os.listdir(pic_path)
if len(picture_names)==0:
    print("没有文件")
 
else:
    # 获取分割后图片的尺寸
    img_1_1 = cv2.imread(pic_path + '1_1.jpg')
    (width, length, depth) = img_1_1.shape
    # 分割名字获得行数和列数,通过数组保存分割后图片的列数和行数
    for picture_name in picture_names:
        num_width_list.append(int(picture_name.split("_")[0]))
        num_lenght_list.append(int((picture_name.split("_")[-1]).split(".")[0]))
    # 取其中的最大值
    num_width = max(num_width_list)
    num_length = max(num_lenght_list)
    # 预生成拼接后的图片
    splicing_pic = np.zeros((num_width*width, num_length*length, depth))
    # 循环复制
    for i in range(1, num_width+1):
        for j in range(1, num_length+1):
            img_part = cv2.imread(pic_path + '{}_{}.jpg'.format(i, j))
            splicing_pic[width*(i-1) : width*i, length*(j-1) : length*j, :] = img_part
    # 保存图片,大功告成
    cv2.imwrite(pic_target + 'result.jpg', splicing_pic)
    print("done!!!")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

拼接后的效果图如下:

在这里插入图片描述

注意:分割和代码采用文中的分割代码,拼接才能成功,或者保持相同的命名方式。

3. Acknowledgment

感谢作者的好友 HNU_刘yuan 对本文的帮助

Reference

https://blog.csdn.net/qq_40608730/article/details/109190493

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/678693
推荐阅读
相关标签
  

闽ICP备14008679号