Python划分n宫格

Python划分n宫格

只用到了numpy和matplotlib.pyplot和PIL,且是居中裁剪。

import math
import random
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
image = Image.open('173.jpg')
print("请输入要获得的宫格数:")
n=eval(input())
x=int(math.sqrt(n))
b=int(n/x)
image = np.array(image)
plt.imshow(image)
plt.show()
H,W=image.shape[0],image.shape[1]
height=int(H//x)
width=int(W//b)
rem_h=H%height
rem_w=W%width
rem_hr=int(rem_h//2)
rem_wr=int(rem_w//2)
a=[]
for h in range(rem_hr,H-rem_hr-1,height):#居中裁剪
    for w in range(rem_wr,W-rem_wr-1,width):
        tmp=image[h:h+height,w:w+width,:]
        a.append(tmp)
l=random.sample(list(range(n)), n)#随机生成一个列表,代表我拼接的图片块是随机的
r=random.sample(list(range(int(x))), int(x))
co=[]
for i in range(0,len(l),int(b)):
    tmp=a[l[i]]
    for j in range(1,int(b)):
        tmp=np.concatenate((tmp,a[l[i+j]]),axis=0)
    co.append(tmp)
rw=co[r[0]]
for i in range(1,int(x)):
    rw=np.concatenate((rw,co[r[i]]),axis=1)
plt.imshow(rw)
plt.show()

总结

n宫格划分我是利用随机数进行划分的,每一次的效果都不一样。
拼接主要用到了numpy的concatenate函数。

原图

在这里插入图片描述

结果

这是25宫格的一个划分
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值