educoder:Numpy图像处理

news2025/1/15 7:05:18

第1关:图像翻转

任务描述

本关任务:读取一副图片,实现图片的翻转。

相关知识

为了完成本关任务,你需要掌握:1.如何读取和保存图像,2.图像的数组表示。

彩色图像

与人脑不同,计算机读入一张图像后,是转换成了数字来处理的,而Numny正是对这些数字化图像再加工的强大工具。

彩色图像 一幅彩色图像可以看成是由许多的点组成的,如图所示 图像中的单个点称为像素(pixel),每个像素都有一个值,称为像素值,它表示特定颜色的强度 一个像素值通常用R,G,B三个分量表示。 32位颜色中每个像素的每个颜色分量用8位表示,表示亮度,取值范围是0~255,0最暗,255最亮,也可用浮点数表示,范围是0~1 对于浮点数形式, (0, 0, 0)代表黑色; (1.0, 1.0, 1.0)代表白色; (1.0, 0, 0)代表红色

载入和显示图像

用来处理图像的软件包 PIL是Python的一个广泛使用的图像软件包,此处用于载入图片文件 matplotlib是Python的一个绘图库,此处用于显示图片

  1. from PIL import Image
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. #载入图片并转成numpy数组
  5. im = np.array(Image.open('numpy/证件照.jpeg'))
  6. im = im/255 #转到定义域[0,1]
  7. print(im.shape) #(638, 504, 3) 图像的宽、高、通道数
  8. plt.imshow(im) #显示图像

查看图像数据

图像的左上角像素 print(im[0,0]) 输出结果:[0.99607843 0.99607843 1. ] 表明左上角的像素为白色,白色的3个通道数据都接近1 有些图像(例如png)有4个通道,多出来的通道是alpha通道,用来指示透明度 图像最下面一行的中间像素 print(im[637,252]) 输出结果:[0.20784314 0.17647059 0.22745098] 这是接近黑色的颜色

垂直翻转图像并存储

  1. #垂直翻转图片,相当于最后一行变第一行
  2. #用切片对第一个纬度(行的维度)进行反转即可
  3. im2=im[::-1,:,:]
  4. plt.imshow(im2) #显示图片
  5. #将数据转回[0,255]区间
  6. im2=(im2*255).astype(np.uint8)
  7. #存储翻转后的图片
  8. Image.fromarray(im2).save('numpy/白色背景照片垂直翻转.jpeg')

编程要求

根据提示,在右侧编辑器补充代码。

测试说明

平台会对你编写的代码进行测试。


开始你的任务吧,祝你成功!

代码:

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np

#载入图片并转成numpy数组
im = np.array(Image.open('image/panda.png'))  
im = im/255 #转到定义域[0,1]

#1.水平翻转图片,保存到图片文件filename中
    #代码开始
def Turn_1(filename):
    im2=im[:,::-1,:]
    plt.imshow(im2)
    im2=(im2*255).astype(np.uint8)
    Image.fromarray(im2).save(filename)
    #代码结束
#2.180度翻转图片,保存到图片文件filename中
def Turn_2(filename):
    im2=im[::-1,::-1,:]
    plt.imshow(im2)
    im2=(im2*255).astype(np.uint8)
    Image.fromarray(im2).save(filename)
    #代码结束

第2关:图像伽玛转换

任务描述

本关任务:按要求实现图像的伽玛转换。

相关知识

为了完成本关任务,你需要掌握:1.什么是伽玛转换,2.如何实现伽玛转换。

图像的伽玛转换

1、什么是Gamma变换 Gamma变换是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系: Vout=AVinγ

这个指数即为Gamma。

Gamma变换就是用来图像增强,其提升了暗部细节,简单来说就是通过非线性变换,让图像从暴光强度的线性响应变得更接近人眼感受的响应,即将漂白(相机曝光)或过暗(曝光不足)的图片,进行矫正。

2、Gamma变换的基本形式 大于1时,对图像的灰度分布直方图具有拉伸作用(使灰度向高灰度值延展),如果图像整体或者感兴趣区域较暗,则Gamma>1,可以降低图像对比度;而小于1时,对图像的灰度分布直方图具有收缩作用(是使灰度向低灰度值方向靠拢),如果图像整体或者感兴趣区域较亮,则Gamma<1,可以增加图像对比度。

示例:

  1. #图片的伽玛变换
  2. im3=im**0.3 #提高对比度
  3. plt.imshow(im3) #显示图片
  4. #图片的伽玛变换
  5. im4=im**3 #降低对比度
  6. plt.imshow(im4) #显示图片

编程要求

根据提示,在右侧编辑器补充代码。

测试说明

平台会对你编写的代码进行测试。


开始你的任务吧,祝你成功!

代码:

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np

#载入图片并转成numpy数组
im = np.array(Image.open('image/panda.png'))  
im = im/255 #转到定义域[0,1]

#1.提高对比度,Gamma值设为0.4,保存到图片文件filename中
def gammaTrans_1(filename):
    #代码开始
    im2=im**0.4
    plt.imshow(im2)
    im2=(im2*255).astype(np.uint8)
    Image.fromarray(im2).save(filename)
    #代码结束
#2.降低对比度,Gamma值设为4,保存到图片文件filename中
def gammaTrans_2(filename):
    #代码开始
    im2=im**4
    plt.imshow(im2)
    im2=(im2*255).astype(np.uint8)
    Image.fromarray(im2).save(filename)
    #代码结束

第3关:图像背景颜色改变

任务描述

本关任务:编写程序按要求修改图像背景颜色。

相关知识

为了完成本关任务,你需要掌握:利用 Numpy 数组的布尔值条件筛选,对数组中的值进行更新。

修改背景颜色

  1. #证件照更换背景颜色为蓝色
  2. #白色背景的颜色大致在0.98-1.0之间
  3. #使用布尔索引替换像素
  4. im5=im.copy() #复制数组
  5. #对轴2方向求和,即求每个像素的3通道之和
  6. im5[np.sum(im5,axis=2)>0.98*3]=[0,0,0.75]
  7. #plt.imshow(im5) #显示图片

由于衣领部分也是白色,因此被误认为是背景而错误地改成了蓝色 处理方案:轮廓搜索 对每一行,找到第一个非白色就是轮廓,将轮廓左边的颜色改成蓝色 对每一行,找到的最后一个非白色也是轮廓,将轮廓右边的颜色改成蓝色

  1. im6=im.copy() #复制数组
  2. for row in im6: #row是一行像素
  3. #where返回一个元组,元组第一个元素是列表,列表中是满足条件的元素的序号
  4. x=np.where(np.sum(row,axis=1)<0.98*3)[0]
  5. if len(x)==0:#没有满足条件的,表示全是白色
  6. row[:]=[0,0,0.75]
  7. else:#满足条件的第一个序号是轮廓左边位置,最后一个是轮廓右边
  8. row[:x[0]]=row[x[-1]:]=[0,0,0.75]
  9. plt.imshow(im6)

numpy.where()函数

numpy.where() 函数返回输入数组中满足给定条件的元素的索引。 示例:

  1. import numpy as np
  2. a = np.arange(9).reshape(3, 3)
  3. print ('我们的数组是:')
  4. print (a)
  5. print ( '大于 3 的元素的索引:')
  6. y = np.where(a > 3)
  7. print (y)
  8. print ('使用这些索引来获取满足条件的元素:')
  9. print (a[y])

输出结果:

  1. 我们的数组是:
  2. [[0 1 2]
  3. [3 4 5]
  4. [6 7 8]]
  5. 大于 3 的元素的索引:
  6. (array([1, 1, 2, 2, 2], dtype=int64), array([1, 2, 0, 1, 2], dtype=int64))
  7. 使用这些索引来获取满足条件的元素:
  8. [4 5 6 7 8]

多个条件式的使用: 多个条件式时,用()将其分开,条件式与条件式之间可以用 &,| 逻辑运算符进行连接。但不可以使用and,or等关键字链接。

  1. print(np.where((a > 2) & (a < 6), -1, 100))
  2. [[100 100 100]
  3. [ -1 -1 -1]
  4. [100 100 100]]
  5. print(np.where((a > 2) & (a < 6) | (a == 7), -1, 100))
  6. [[100 100 100]
  7. [ -1 -1 -1]
  8. [100 -1 100]]

编程要求

根据提示,在右侧编辑器补充代码。

测试说明

平台会对你编写的代码进行测试。 原始图片如下:


开始你的任务吧,祝你成功!

代码:

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np

#载入图片并转成numpy数组
im = np.array(Image.open('image_2/doraemon.webp'))  

#修改背景颜色,保存到图片文件filename中
#背景颜色蓝色(RGB值之和在大于350小于460之间),修改为橙色(RGB的值为[255,165,0])
def Background_change(filename):
    #代码开始
    im2=im.copy()
    for i in im2:
        x=np.where((np.sum(i,axis=1)>=460)|(np.sum(i,axis=1)<=350))[0]
        if len(x)==0:
            i[:]=[255,165,0]
        else:
            i[:x[0]]=i[x[-1]:]=[255,165,0]
            plt.imshow(im2)
    Image.fromarray(im2).save(filename)
    #代码结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/94140.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

给视频智能配音怎么弄?一步一步让你学会配音操作

如今我们的生活变得越来越便捷化&#xff0c;因此越来越多的新鲜事物出现在了我们的眼前&#xff0c;例如配音。随着短视频逐渐火爆起来&#xff0c;相信屏幕前的你也剪辑过自己拍摄的视频&#xff0c;并将其发到各大社交平台上吧&#xff01;但是对于视频剪辑来说&#xff0c;…

HTML CSS

一、HTML 介绍 HTML 是一门语言&#xff0c;所有的网页都是用HTML 这门语言编写出来的。HTML(HyperText Markup Language)&#xff1a;超文本标记语言&#xff1a;&#xff08;1&#xff09;超文本&#xff1a;超越了文本的限制&#xff0c;比普通文本更强大。除了文字信息&…

2022 年值得了解的基础设施即代码工具清单

云计算的出现彻底改变了每个 IT 领域。不排除 IT 基础设施。管理员不得不手动配置资源并管理大型 Excel 表格中的数据的日子已经一去不复返了。在当今动态变化的网络需求下&#xff0c;人工维护 IT 基础设施的想法非常可怕。这就是基础设施即代码工具的用武之地。 简单地说&…

【PostgreSQL的“double buffers“刷脏机制和参数】

PostgreSQL数据库使用双缓存写数据&#xff0c;shared_buffer OS page cache,下图是PG与OS内存交互的过程 ,在PostgreSQL中&#xff0c;shared_buffers所代表的内存区域可以看成是一个以8KB的block为单位的数组&#xff0c;即最小的分配单位是8KB。这正好是一个page的大小&…

手慢无,阿里云神作被《Spring Boot进阶原理实战》成功扒下,限时

又来给大家分享好书了&#xff1a;郑天民老师的 《Spring Boot进阶:原理、实战与面试题分析》&#xff0c;别问网上有没有开源版本&#xff01;问就是我也不知道&#xff0c;哈哈&#xff01;但我会有 郑天民是谁&#xff1f; 资深架构师和技术专家&#xff0c;有近15年的软件…

中英文说明书丨艾美捷CD8α体内抗体相关研究方案

艾美捷CD8α体内抗体英文说明&#xff1a; CD8a (Ly 2.2) is present on the surface of most thymocytes and mature T-lymphocyte subsets including most T-suppressor/cytotoxic cells. CD8 participates in T cell activation by binding to T cell receptor complex and…

python csv数据集处理

目录 一&#xff1a;数据集准备 二&#xff1a;加载文件 三&#xff1a;查看DataFrame的头部和尾部数据 &#xff0c;shape 四&#xff1a;统计摘要 五&#xff1a;获取数据 六&#xff1a;缺失值处理 一&#xff1a;数据集准备 可以新建txt&#xff0c;复制下面内容&…

登录处cookie验证逻辑漏洞——以熊海CMS为例

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是登录处cookie验证逻辑漏洞。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未…

室内定位:物联网时代发展的必然需求

室内定位是指在室内环境中实现位置定位&#xff0c;主要采用无线通讯、基站定位、惯导定位等多种技术集成形成一套室内位置定位体系&#xff0c;从而实现人员、物体等在室内空间中的位置监控。 物联网时代&#xff0c;位置服务已成为人们工作生活必不可少的服务之一。蓝牙、5G、…

交换机和路由器

一台交换机有很多个端口&#xff0c;这些端口有各自的编号 计算机的网卡通过网线连接到交换机的网口上 在交换机中&#xff0c;有一张端口和MAC地址的映射表&#xff0c;称为MAC地址表&#xff0c;交换机维护这张表 交换机里的主机都是处在同一个子网里 不同子网之间是不能直…

一起Talk Android吧(第四百四十三回:UI控件之NumberPicker)

文章目录概念介绍使用方法内容总结各位看官们大家好&#xff0c;上一回中咱们说的例子是"UI控件之下拉列表:Spinner",这一回中说的例子是" UI控件之NumberPicker"。闲话休提&#xff0c;言归正转&#xff0c;让我们一起Talk Android吧&#xff01;概念介绍…

Shiro框架入门

概述 官网介绍如下&#xff1a; Apache Shiro™ is a powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management. With Shiro’s easy-to-understand API, you can quickly and easily secure a…

[C/C++/初学者]万年历(输入年份和月份,输出对应的日历表——数组)

//本代码不考虑历法问题&#xff0c;设定1年1月1日为星期一。 //以星期日为始。 //完整代码在最下方。 根据题意&#xff0c;我们首先需要接收年份的月份的数据。 printf("请输入年份&#xff1a;");scanf("%d",&Year);printf("请输入月份&#x…

Unity Addressables资源管理 资源组设置

Addressables资源管理总目录 1.Schema 翻译为&#xff1a;模式&#xff0c;计划。 目前理解为每个组的打包设置。 默认设置是只有两个Content Update Restriciton 和Content Packing& Loading 2.Content Update Restriction 内容更新方式 Can Change Post Release&…

Qt扫盲-QToolBox理论总结

QToolBox理论总结1. 简述2. 常用功能3. 信号&用途1. 简述 QToolBox 是一个类似前端的抽屉容器&#xff0c;它有一组选项卡&#xff0c;每个选项卡会在其下方自带有一个QWidget 来会显示一些内容。每个选项卡在选项卡列表中都有一个索引位置。这个选项卡的位置也是有顺序的…

Kerberos的概述和认证原理

什么是 Kerberos ​ Kerberos 是一种计算机网络认证协议&#xff0c;用来在非安全网络中&#xff0c;对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端/服务器结构&#xff0c;并且能够进行相互认证&#xff…

国产三维gis软件的行业赋能情况

自二十世纪六十年代世上第一个GIS——加拿大地理信息系统&#xff08;CGIS&#xff09;面世至今&#xff0c;短短的40多年&#xff0c;GIS技术性从咿呀学语迈向了健康成长&#xff0c;在土地规划、电力工程、电信网、大城市管道网、水利工程、消防安全、交通出行及其城乡规划等…

Webug靶场搭建详解

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是Webug靶场搭建详解。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未授权设…

C++ Reference: Standard C++ Library reference: Containers: map: map: find

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/find/ 公有成员函数 <map> std::map::find iterator find (const key_type& k); const_iterator find (const key_type& k) const;获取指向元素的iterator 在容器中搜索键值等于k的元素&…

助力软件供应链安全 蚂蚁集团多项产品入选信通院优秀案例

近日&#xff0c;由中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;主办&#xff0c;中国通信标准化协会云计算标准和开源推进委员会承办的3SCON软件供应链安全会议以线上直播形式召开。会上主办方发布了首期《软件供应链厂商和产品名录》&#xff0c;蚂蚁集…