图片裁剪与分辨率重置(python)

一、图片裁剪

全景图进行展示通常需要进行裁剪,一张全景图要裁剪成32张(4行*8列)
在这里插入图片描述

二、使用步骤

1.引入库

import glob

import math, shutil

import os.path

import cv2

from PILimport Image

2.读入数据

代码如下(示例):

     order = 0 

 for pa_pic in glob.glob("panorama/*.jpg"):

    cut_panorama(pa_pic, order)

    order += 1

order是作为序号便于后面命名

3.执行裁剪

def cut_panorama(name, order):
    img = cv2.imread(name)
    print(type(img.shape))
    // 将该图片分成4行8列
    x_cut = img.shape[0] / 4  # *0.72
    y_cut = img.shape[1] / 8
    # 输出当前像素
    print(x_cut)
    print(y_cut)
    n = 0
    path = './pythonProject/output/'
    for i in range(4):
        for j in range(8):
            xs = int(i * x_cut)
            xe = int((i + 1) * x_cut)
            ys = int(j * y_cut)
            ye = int((j + 1) * y_cut)
            cropped = img[xs:xe, ys:ye]  # 裁剪坐标为[y0:y1, x0:x1]
            print('n转换前:', n)
            // 前方高能,序号转换
            if 0 <= n % 8 < 4:
                m = n + 4
            else:
                m = n - 4
            print('n转换后:', m)
            // 如果序号不到10,要补足两位
            num = '0' if m < 10 else ''
            mt = math.pow(10, 5 - len(str(order)))
            begin_num = str(int(mt))[1:]
            filename = begin_num + str(order) + '-pano-tex-r0-' + num + str(m) + '.jpg'
            print('fileName:', filename)
            cv2.imwrite(os.path.join(path, filename), cropped)
            n += 1
    print(f'Hi, finished')  # Press Ctrl+F8 to toggle the breakpoint.


// 更改当前文件夹内所有jpg的分辨率
def convertjpg(jpgfile, k):
    img = Image.open(jpgfile)
    resolution = int(math.pow(2, k + 7))  // 当前分辨率
    new_img = img.resize((resolution, resolution), Image.ANTIALIAS)
    new_img.save(os.path.join("output/r" + str(k), os.path.basename(jpgfile)))
    // 图片重命名
    sonFolder = jpgfile.split('\\')
    newOrder = int(sonFolder[1].split('-')[0]) // 100
    dstFileFront = sonFolder[0] + '\\r' + str(k) + '\\'
    newFolder(dstFileFront + str(newOrder))
    dstFileMiddle = str(newOrder) + '\\' + sonFolder[1].split('r')[0] + 'r' + str(k) + '-'
    dstFileBack = jpgfile.split('-')[4]
    os.rename(sonFolder[0] + '\\r' + str(k) + '\\' + sonFolder[1], dstFileFront + dstFileMiddle + dstFileBack)


def newFolder(filepath):
    folder = os.path.exists(filepath)
    if not folder:
        os.makedirs(filepath)
        print(filepath, " has been created!")

总结

由于图片裁剪后通常还要进行分辨率设置,后面的convertJpg为图片分辨率重新调整

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值