python实现图片按比例缩放,以固定大小截取图片

1.按比例缩放


import cv2
import os

if __name__ == '__main__':
    img_load_path='./test/img/'  #原图片路径
    img_save_path = './test/img_change/'  # 修改大小后保存路径
    img_names=os.listdir(img_load_path)

    i=0 #图片命名、计数
    for img_name in img_names:
        img_path=img_load_path+img_name
        img = cv2.imread(img_path,1)
        # cv2.imshow('resize before', img)

        h,w=img.shape[:2]
        # 缩放比例k,>1表示放大,<1表示缩小
        k = 2 / 3

        # 元组参数,为宽,高k
        img = cv2.resize(img, (int(w * k), int(h * k)),interpolation=cv2.INTER_LINEAR)
        # cv2.imshow('resize after', img)

        # 写入新文件
        cv2.imwrite('./test/img_change/'+str(i)+'.png', img)
        i += 1
    
        # 延迟关闭
    cv2.waitKey()

2.以固定大小截取图片

import cv2
import numpy as np
import os

def img_cut(img, side, img_save_path,num):
    h_size, w_size = img.shape[0], img.shape[1] # 高宽尺寸
    # 共截取(num_h+1)* (num_w+1)张图片,
    num_h, num_w = h_size//side, w_size//side 
    # 截取后图片的计数编号
    num = (num_h+1) * (num_w+1) * num 

    img = np.array(img)
    img_crop = np.zeros((side,side,3))
    image = []
    for h in range(0,num_h):
        for w in range(0,num_w):
            img_crop =  img[h*side:(h+1)*side,w*side:(w+1)*side]
            image.append(img_crop)
            if w == num_w - 1:
                img_crop = img[h*side:(h+1)*side,w_size-side:w_size]
                image.append(img_crop)
        if h == num_h - 1:
            for w in range(0,num_w):
                img_crop =  img[h_size-side:h_size,w*side:(w+1)*side]
                image.append(img_crop)
                if w == num_w - 1:
                    img_crop = img[h_size-side:h_size,w_size-side:w_size]
                    image.append(img_crop)

    for i in range(0,len(image)):
        image_i = image[i]
        path_image_i = img_save_path + str(num+i+1)+str('.jpg')
        cv2.imwrite(path_image_i,image_i)

if __name__ == '__main__':
    img_load_path='./test/img/'  #原图片路径
    img_save_path = './test/img_change/'  # 截取后保存路径
    side = 1000	   # 裁剪大小1000*1000
    img_names=os.listdir(img_load_path)
    i=0  #来记录第几张图片
    for img_name in img_names:
        img_path=os.path.join(img_load_path,img_name)     
        img = cv2.imread(img_path)  
        img_cut(img ,side=side,img_save_path=img_save_path,num=i)
        i+=1

效果

原图

截取后的图

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值