python如何不用CV库完成图像整数倍的放大

该文介绍了一个使用Python编程实现24位位图bmp格式图像扩大三倍的方法。通过将图像转换为三维数组,利用numpy库生成新的扩大后数组,并用PIL库读取和处理图像数据。文章详细阐述了如何填充新数组以复制原图像素并扩展图像,最后将处理后的数组保存为新的bmp图像。
摘要由CSDN通过智能技术生成

这里用24位位图的bmp格式演示,下图是一个8*6的图片,对其扩大三倍

一个图像可以转化为一个三维数组,例如一个2*2  24位位图的bmp格式图像可以转成

[[[ 1  1  1]
  [ 1  1  1]]

 [[ 1  1  1]
  [30 89 77]]]

所以,我们可以用数组的方式进行图像扩充

首先,导入numpy库

import numpy as np              #引入库
import matplotlib.image as img
from PIL import Image

输入对应的值

long=int(input('导入的图像长度:'))
wide=int(input('导入的图像宽度:'))
inname=input("please enter the picture path:")
end_l=long*num
end_w=wide*num
im = img.imread(inname)  # 图像读取

然后生成一个扩大后的图像数组,这里我们生成为1的数组(这里任意数字都可以,这里为了方便演示),接下来就是读取原图每一个像素的数据,用x和y作为计数器,用于定位在新数组的位置。我们把原图中的每一个像素的数据一次放到对应位置,就可以生成下图。

new=np.full((end_w, end_l, 3), 1)#生成一个扩大后的图像的数组

y=num-1
x=-1
for i in range(0, wide):
    x=x+num
    for i1 in range(0,long):        #读取每一位像素
        new[x][y]=im[i][i1]
        y = y + num
        if y>end_l:                 #图像超出范围,还原变量y
            y=num-1
new=add(num)

 接下来就是要填充对应的正方形,因为我们对应位置是正方形的右下角,所以要把剩余的位置填充一样的颜色。这里用for循环来完成,前两行的row和line的循环可以定位读写出上图中彩色块的位置,i1和i2会依次经过正方形的每一个像素点,然后全部填充为右下角的颜色。

def add(num): #复制右下角的像素,填充整个正方形
    for row in range(num-1, end_w, num):
        for line in range(num-1, end_l, num):
            for i1 in range(0,num):
                for i2 in range(0, num):
                    new[row-i1][line-i2] = new[row][line]
    return new

 这样子,就可以生成一个扩大的图像,然后就可以保存图像

new = Image.fromarray(np.uint8(new))    ##将array转成PIL image
new.save("outname.bmp")    # 生成图片+保存图片

jpg格式也可以,原图片和输出的图片最好是相同格式,不同格式也可以,但是图像会有锯齿

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值