opencv-python 按比例拆分图像--按比例拼合图像

例如:一张图像我想 均匀分为9份,设置参数为3即可,代表高度与宽度都除3,就分成了9份。
如果无法整除,在拼接回原图时,会有几个像素的偏差。

import cv2
import os


def cut_image_1(image, n):
    # 图像、总切分数= n * n
    w, h, c = image.shape

    w_1 = w / n  # y
    h_1 = h / n  # x

    # 截图误差 补偿(正数)
    y_e, x_e = w - (int(w_1) * n), h - (int(h_1) * n)
    save = 0

    list_img = []

    y1 = 0
    y2 = int(w_1)

    for i in range(n):

        x1 = 0
        x2 = int(h_1)

        for j in range(n):
            cut = image[y1:y2, x1:x2]

            x1 = x1 + int(h_1)
            x2 = x2 + int(h_1)

            # save += 1
            # cv2.imwrite(f'images_ce/{save}.png', cut)

            list_img.append(cut)

        y1 = y1 + int(w_1)
        y2 = y2 + int(w_1)
    return list_img, (y_e, x_e)


def cut_image_2(img_list, f):
    if not img_list:
        return
    vconcat = []
    hconcat = []
    for i in range(len(img_list[0])):
        hconcat.append(img_list[0][i])
        if len(hconcat) % f == 0:
            # 可多张拼接
            hconcat_i = cv2.hconcat(hconcat)  # 水平拼接
            vconcat.append(hconcat_i)
            hconcat = []

    img = cv2.vconcat(vconcat)  # 垂直拼接
    print(img.shape)
    # cv2.imwrite('images_ce/he.png', img)
    return img


if __name__ == '__main__':
    f = 3  # 原图 左右拆分几份,上下拆分几份
    img_0 = cv2.imread("images_0/1.jpg")

    img_list = cut_image_1(img_0, f)

    img = cut_image_2(img_list, f)

    # 文件夹 拆分 图像
    # path = "F:/ce/FastestDet/images_0/"
    #
    # list_img_name = os.listdir(path)
    # print(list_img_name)
    # n = 0
    # for img_i in range(len(list_img_name)):
    #
    #     img = cv2.imread(path + list_img_name[img_i])
    #     img_list = cut_image(img, 3)
    #     for i in img_list[0]:
    #         n += 1
    #
    #         cv2.imwrite(f'images_1_save/{n}.png', i)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

默执_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值