python 实现图像分块算法 spilt

python 实现图像分块算法 spilt

注意保存的格式问题, cv2.imwrite()保存的得到BRG转RGB,以及BRG转gray

import numpy as np
import matplotlib.pyplot as plt
import cv2
# https://blog.csdn.net/qq_39237205/article/details/124285223
# https://blog.csdn.net/u014636245/article/details/82930840

#---------------------------------------------
def divide_method3(img, m, n):
    h, w = img.shape[0], img.shape[1]
    # print("w,h",h, w)

    grid_h = int(h * 1.0 / (m - 1) + 0.5)  # 每个网格的高
    grid_w = int(w * 1.0 / (n - 1) + 0.5)  # 每个网格的宽

    # 满足整除关系时的高、宽
    h = grid_h * (m - 1)
    w = grid_w * (n - 1)

    gx, gy = np.meshgrid(np.linspace(0, w, n), np.linspace(0, h, m))
    gx = gx.astype(np.int_)
    gy = gy.astype(np.int_)



    last_val_x = [img.shape[0]] * n
    last_val_y = [img.shape[1]] * m

    gx[:, n - 1] = last_val_x
    gy[m - 1, :] = last_val_y

    print("gx:", gx)
    print("gy:", gy)

    # divide_image = ()
    # index = 0
    # for i in range(m - 1):
    #     for j in range(n - 1):
    #         divide_image[index] = img[gy[i][j]:gy[i + 1][j + 1], gx[i][j]:gx[i + 1][j + 1], :]
    #         index = index + 1

    divide_image = []
    for i in range(m - 1):
        for j in range(n - 1):
            # divide_image[i, j, ...] = img[
            # gy[i][j]:gy[i + 1][j + 1], gx[i][j]:gx[i + 1][j + 1], :]
            print("i------->j:",i,j)
            print("gy:", gy[i][j], gy[i + 1][j + 1])
            print("gx:", gx[i][j], gx[i + 1][j + 1])
            divide_image.append(img[gy[i][j]:gy[i + 1][j + 1], gx[i][j]:gx[i + 1][j + 1], :])

    return divide_image


def display_blocks3(divide_image):
    m = len(divide_image)
    for i in range(m):
        print("img:", divide_image[i].shape)
        # plt.imshow(divide_image[i])
        # plt.axis('off')
        # plotPath = str(title) + "+" + str(i) + str(j) + '.jpg'  # 图片保存路径
        # plotPath = str(i) + str(j) + '.jpg'  # 图片保存路径
        
 # plt.savefig("G:/spyder_workplace/" + plotPath)
        # plt.savefig("F:/rock_data/S5Mars_data/S5Mars_data/change/save/image/" + plotPath, divide_image[i])
        # plt.imsave("F:/rock_data/S5Mars_data/S5Mars_data/change/save/image/" + plotPath, divide_image[i])

# plotPath = str(i) + '.png'  # 图片标签是png ,注意转8位的灰度图
        # cv2.imwrite("F:/rock_data/S5Mars_data/S5Mars_data/change/save/label/" + plotPath,
        #             cv2.cvtColor(divide_image[i], cv2.COLOR_BGRA2GRAY))  # 利用cv2.imwrite()保存图像

        plotPath = str(i) + '.jpg'  # 图片保存路径 转为rgb
        cv2.imwrite("F:/rock_data/S5Mars_data/S5Mars_data/change/save/image/" + plotPath, cv2.cvtColor(divide_image[i],cv2.COLOR_BGR2RGB))  # 利用cv2.imwrite()保存图像


if __name__ == '__main__':
    plt.switch_backend('agg')
    img = cv2.imread('F:/rock_data/S5Mars_data/S5Mars_data/change/image/0025MR0001200090100730E01_DXXX.jpg')  # 图片地址
    # img = cv2.imread('F:/rock_data/S5Mars_data/S5Mars_data/change/label/0025MR0001200090100730E01_DXXX.png')
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    h, w = img.shape[0], img.shape[1]
    m = 5
    n = 5
    divide_image3 = divide_method3(img, m + 1, n + 1)  # 该函数中m+1和n+1表示网格点个数,m和n分别表示分块的块数
    fig3 = plt.figure('分块后的子图像:图像缩放法')
    display_blocks3(divide_image3)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值