案例分析|Python使用嵌套循环实现图像处理算法

简介: 本案例的是通过图像处理算法案例,深入了解Python数据结构和基本算法流程。

640 (5).jpg

01、图像的数据结构概述

使用Python第三方图像处理库Pillow处理图像时,通常是调用模块中提供的函数和对象来实现图像的基本处理。

实际上,在“底层”图像是由像素点组成的二维数组,每个像素点的位置表示为两个整数的元组,像素的值根据图像模式由对应的元组组成(例如,RGB模式表示为三个整数值组成的元组,分别表示构成颜色的红、蓝、绿的值,范围为0到255)。

图像处理的算法(例如,复制、旋转、裁剪和平滑图像等)根本上就是使用嵌套循环模式对这些像素进行处理。PIL.Image模块中的Image类的方法getpixel()和putpixel()可以用于读取和修改特定位置(loc)的像素的颜色值(pix)。其语法格式如下:

im.getpixel(loc) #返回位于位置loc的像素的颜色。

im.putpixel(loc, pix) #把位于位置loc的颜色替换为pix。

02、拷贝图像

拷贝图像的算法可以通过打开原始图像,创建一个新的大小相同的空白图像,然后将旧图像中的像素颜色复制到新图像相应的像素中。即使用嵌套循环,把旧图像位置(i, j)的像素复制到新图像的位置(i, j)。

【例1】实现图像拷贝函数copy(),输入原始图像对象,返回拷贝后的图像对象。

#模块:c:\pythonpa\cs\image_process.py
import PIL.Image
def copy(im):
    """返回拷贝后的图像对象"""
    # 创建与原始图像相同模式和大小的新图像对象
    im_new = PIL.Image.new(im.mode, im.size)
    width, height = im.size
    # 使用嵌套循环,把旧图像位置(i, j)的像素复制到新图像的位置(i, j)
    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("c:/pythonpa/cs/img/mandrill.jpg")
    copy(im).show()

03、剪裁图像

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

【例2】实现图像剪裁函数crop(),输入原始图像对象,返回剪裁后的图像对象。

#模块:c:\pythonpa\cs\image_process.py
import PIL.Image
def crop(im, box):
    """返回使用矩形框剪切后的图像对象"""
    # 剪切框定义左上角和右下角坐标位置
    x1,y1,x2,y2 = box
    # 计算新图像的宽度width和高度height,并创建新图像
    width,height = x2-x1, y2-y1
    im_new = PIL.Image.new(im.mode, (width, height))
    # 使用嵌套循环,把旧图像剪切框内的像素拷贝到新图像
    for i in range(width):
        for j in range(height):
            pix = im.getpixel((x1+i,y1+j))
            im_new.putpixel((i,j), pix)
    return im_new
#测试代码
if __name__ == "__main__":
    im = PIL.Image.open("c:/pythonpa/cs/img/mandrill.jpg")
    crop(im).show()

04、水平或垂直翻转图像

水平或垂直翻转的算法可以通过打开原始图像,创建一个新的大小相同的空白图像,然后将旧图像中的像素颜色复制到新图像相应的像素中。水平翻转时,原始图像的像素(i,j)映射到目标图像的位置(width-i-1,j);垂直翻转时,原始图像的像素(i,j)映射到目标图像的位置(i,height-j-1)。

【例3】实现图像水平或垂直翻转函数flip(),输入原始图像对象,返回水平或垂直翻转后的图像对象。

#模块:c:\pythonpa\cs\image_process.py
import PIL.Image
def flip(im, orient="H"):
    """返回水平或垂直翻转后的图像对象"""

    # 获取图像的宽度width和高度height,并创建新图像
    width,height = im.size
    im_new = PIL.Image.new(im.mode, im.size)
    # 使用嵌套循环,把旧图像的像素拷贝到新图像对应位置
    for i in range(width):
        for j in range(height):
            pix = im.getpixel((i,j))
            if orient == "H": #水平翻转时
                # 原始图像的像素(i,j)映射到目标图像的位置(width-i-1,j)
                im_new.putpixel((width-i-1,j), pix)
            else: #垂直翻转时
                # 原始图像的像素(i,j)映射到目标图像的位置(i,height-j-1)
                im_new.putpixel((i,height-j-1), pix)
    return im_new
#测试代码
if __name__ == "__main__":
    im = PIL.Image.open("c:/pythonpa/cs/img/mandrill.jpg")
    flip(im, orient="H").show()
    flip(im, orient="V").show()

05、逆时针或顺时针旋转图像90度

逆时针或顺时针旋转图像90度的算法可以通过打开原始图像(width×height),创建一个新的height×width大小的空白图像,然后将旧图像中的像素颜色复制到新图像中相应的像素中。逆时针旋转图像90度时,原始图像的像素(i,j)映射到目标图像的位置(j,width-i-1);顺时针旋转图像90度,原始图像的像素(i,j)映射到目标图像的位置(height-j-1,i)。

【例4】实现图像逆时针或顺时针旋转90度的函数rotate(),输入原始图像对象,返回逆时针或顺时针旋转90度后的图像对象。

#模块:c:\pythonpa\cs\image_process.py
import PIL.Image
def rotate(im, orient="CC"):
    """返回逆时针或顺时针旋转90度后的图像对象"""

    # 获取图像的宽度width和高度height,并创建新图像
    width,height = im.size
    im_new = PIL.Image.new(im.mode, im.size)
    # 使用嵌套循环,把旧图像的像素拷贝到新图像对应位置
    for i in range(0, width):
        for j in range(0, height):
            pixel = im.getpixel((i,j))
            if orient == "CC": #逆时针针旋转90度时
                # 原始图像的像素(i,j)映射到目标图像的位置(j,width-i-1)
                im_new.putpixel((j, width-i-1), pixel)
            else: #顺时针旋转90度时
                # 原始图像的像素(i,j)映射到目标图像的位置(height-j-1,i)
                im_new.putpixel((height-j-1, i), pixel)
    return im_new
#测试代码
if __name__ == "__main__":
    im = PIL.Image.open("c:/pythonpa/cs/img/mandrill.jpg")
    rotate(im, orient="H").show()
    rotate(im, orient="V").show()

06、平滑图像过滤器

图像过滤器是原始图像中靠近位置(i, j)的多个像素颜色以某种方式组合运算形成的新的图像对象。

例如,简单的平滑过滤器算法可以通过打开原始图像,创建一个新的大小相同的空白图像,然后将将新图像中的每个像素(i, j)的颜色设置为原始像素(i, j)及其相邻像素的颜色的平均值。不位于图像边界上像素(i, j)有8个相邻像素,其相邻像素位于从列i – 1到列i + 1和行j + 1到行j + 1范围。故可以通过下列代码计算新图像中像素(i, j)的颜色:原始图像中像素(i, j)和它的邻居像素的颜色的平均值。注意,如果像素位于边缘,在i-1可能小于0,故可以使用max(i-1, 0)作为下限;同样,可以使用min(i+1, width)作为上限。

【例5】实现平滑图像过滤器函数smooth(),输入原始图像对象,返回平滑过滤后的图像对象。

#模块:c:\pythonpa\cs\image_process.py
import PIL.Image
def smooth(im):
    """返回拷贝后的图像对象"""
    # 创建与原始图像相同模式和大小的新图像对象
    im_new = PIL.Image.new(im.mode, im.size)
    width, height = im.size
    # 使用嵌套循环,把旧图像位置(i, j)的像素复制到新图像的位置(i, j)
    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("c:/pythonpa/cs/img/mandrill.jpg")
    smooth(im).show()
目录
相关文章
|
1月前
|
算法 搜索推荐 JavaScript
基于python智能推荐算法的全屋定制系统
本研究聚焦基于智能推荐算法的全屋定制平台网站设计,旨在解决消费者在个性化定制中面临的选择难题。通过整合Django、Vue、Python与MySQL等技术,构建集家装设计、材料推荐、家具搭配于一体的一站式智能服务平台,提升用户体验与行业数字化水平。
|
1月前
|
存储 分布式计算 大数据
基于Python大数据的的电商用户行为分析系统
本系统基于Django、Scrapy与Hadoop技术,构建电商用户行为分析平台。通过爬取与处理海量用户数据,实现行为追踪、偏好分析与个性化推荐,助力企业提升营销精准度与用户体验,推动电商智能化发展。
|
1月前
|
存储 监控 算法
监控电脑屏幕的帧数据检索 Python 语言算法
针对监控电脑屏幕场景,本文提出基于哈希表的帧数据高效检索方案。利用时间戳作键,实现O(1)级查询与去重,结合链式地址法支持多条件检索,并通过Python实现插入、查询、删除操作。测试表明,相较传统列表,检索速度提升80%以上,存储减少15%,具备高实时性与可扩展性,适用于大规模屏幕监控系统。
117 5
|
1月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的台风灾害分析及预测系统
针对台风灾害预警滞后、精度不足等问题,本研究基于Python与大数据技术,构建多源数据融合的台风预测系统。利用机器学习提升路径与强度预测准确率,结合Django框架实现动态可视化与实时预警,为防灾决策提供科学支持,显著提高应急响应效率,具有重要社会经济价值。
|
1月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的青少年网络使用情况分析及预测系统
本研究基于Python大数据技术,构建青少年网络行为分析系统,旨在破解现有防沉迷模式下用户画像模糊、预警滞后等难题。通过整合多平台亿级数据,运用机器学习实现精准行为预测与实时干预,推动数字治理向“数据驱动”转型,为家庭、学校及政府提供科学决策支持,助力青少年健康上网。
|
1月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
2月前
|
存储 边缘计算 算法
【太阳能学报EI复现】基于粒子群优化算法的风-水电联合优化运行分析(Matlab代码实现)
【太阳能学报EI复现】基于粒子群优化算法的风-水电联合优化运行分析(Matlab代码实现)
|
2月前
|
JSON 缓存 供应链
电子元件 item_search - 按关键字搜索商品接口深度分析及 Python 实现
本文深入解析电子元件item_search接口的设计逻辑与Python实现,涵盖参数化筛选、技术指标匹配、供应链属性过滤及替代型号推荐等核心功能,助力高效精准的电子元器件搜索与采购决策。
|
算法 搜索推荐 计算机视觉

推荐镜像

更多