Python使用嵌套循环实现图像处理算法

图像的数据结构基础


一:在“底层”图像是由像素点组成的二维数,每个像素点的位置表示为两个整数的元组

二:像素的值根据图像模式由对应的元组组成(例如,RGB模式表示为三个整数值组成的元组,分别表示构成颜色的红、绿、蓝的值,范围从0到255)

PIL.Image模块中的Image类的方法:

  • getpixel(loc) 返回位于位置loc的像素的颜色
  • putpixel(loc, pix) 把位于位置loc的颜色替换为pix

拷贝图像


拷贝图像的算法可以通过打开原始图像,创建一个新的大小相同的空白图像,然后将旧图像中的像素颜色复制到新图像相应的像素中。

即使用嵌套循环,把旧图像位置 (i, j) 的像素复制到新图像的位置 (i, j)

我的电脑,D:\zgh\picture这个路径下有一个图片zgh.png

import PIL.Image

def copy(im):
    im_new = PIL.Image.new(im.mode, im.size)
    width, height = im.size
    for i in range(0, width):
        for j in range(0, height):
            pix = im.getpixel((i, j))
            im_new.putpixel((i, j), pix)
    return im_new

if __name__ == '__main__':
    im = PIL.Image.open("D:\zgh\picture\zgh.png")
    copy(im).show()

运行之后,会出现一个图像文件,显示的图像与上图一样

  • im.size返回包含图像宽度和高度的元组,单位为像素
  • im.mode返回包含图像模式的字符串(RGB、CYMK、Grayscale…)

剪裁图像


剪裁图像的算法可以通过打开原始图像,指定一个四元组的剪裁框,创建一个与剪裁框大小相同的空白图像,然后将旧图像中剪裁框内的像素颜色复制到新图像中。同样可以实用嵌套循环实现像素复制

原图像:

其分辨率为959 × 959

import PIL.Image

def crop(im, box):
    x1, y1, x2, y2 = box
    width, height = x2-x1, y2-y1
    im_new = PIL.Image.new(im.mode, (width, height))
    for i in range(0, width):
        for j in range(0, height):
            pix = im.getpixel((x1+i, y1+j))
            im_new.putpixel((i, j), pix)
    return im_new

if __name__ == '__main__':
    box = (400, 400, 800, 800)
    im = PIL.Image.open("D:\zgh\picture\zgh.png")
    crop(im, box).show()

我图像对图像的剪裁框,左上角坐标为(400, 400),右下角为(800, 800)

box = (400, 400, 800, 800)</
  • 14
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值