使用Numpy和Opencv完成图像的基本数据分析(Part II)

摘要: 使用Numpy和Opencv完成图像的基本数据分析后续部分,主要包含逻辑运算符操作、掩膜以及卫星图像数据分析等操作

       在上一节中,主要是介绍了图像的基本知识以及OpenCV的基本操作,具体内容参见“使用Numpy和Opencv完成基本图像的数据分析(Part I)”。这部分内容是接着上一节的内容,主要介绍一些其它的操作。

使用逻辑操作处理像素值

       可以使用逻辑运算符创建相同大小的数组。但是,逻辑运算操作并不会创建出任何新的数组,只是将True返回给主机变量(host variable)。例如:假设在RGB图像中过滤掉一些像素值低的像素或像素值高的像素(以及其它任何条件),将RGB转换为灰度图看起来不错,但是我们目前不会对彩色图像进行这样的处理。
       首先加载图像,并将其显示在屏幕上:

pic=imageio.imread('F:/demo_1.jpg')
plt.figure(figsize=(10,10))
plt.imshow(pic)
plt.show()

 

1


       注意图像的路径问题.之后需要考虑转储这个显示的图像。假设对于任何情况,我们都想要滤除掉低于某值的所有像素值,并假设该阈值设置为20。为此,我们将使用逻辑运算符来执行此任务,最终结果将返回所有索引的真值。

low_pixel=pic<20 
# 检查所有值在低像素中是否正确
iflow_pixel.any()==True:
print(low_pixel.shape)# 输出结果
(1079, 1293, 3)

       正如之前所说,主机变量,一般并不使用这个名称,但在本文中引用它,这是因为它的行为只保留真值,而不是其他任何形式的值。所以,如果展示low_pixel和pic的形状,我们就会发现它们其实具有相同的形状。

print(pic.shape)
print(low_pixel.shape) # 输出
(1079,1293,3)
(1079,1293,3)

       我们使用全局比较运算符为所有像素值小于200的像素点生成低值滤波器。但是,我们也可以使用此low_pixel数组作为索引将这些低值设置为某些特定值,这些值可能高于或低于先前的像素值。

# 随机选择一个值
import random 
# 加载原始图像
pic=imageio.imread('F:/demo_1.jpg') 
# 随机设置一个值,取值范围25~225 choosenpic[low_pixel]=random.randint(25,225) 
# 展示图像
plt.figure(figsize=(10,10))
plt.imshow(pic)plt.show()

 

2

掩膜

       图像掩膜是一种图像处理技术,被广泛用于去除具有模糊边缘、透明或毛刺部分的照片背景,看起来类似于PS中的一项技术。
       下面将带领读者一起创建一个圆盘形状的掩膜。首先,我们测量从图像中心到每个边界像素值的距离,在这里采用应用比较方便的半径,然后使用逻辑运算符创建一个圆盘。这个过程很简单,如下面的代码所示:

if__name__=='__main__': 
# 加载图像
pic=imageio.imread('F:/demo_1.jpg') 
# 分离行和列
total_row,total_col,layers=pic.shape 
''' 创建矢量,Ogrid 是一个不错的方法method of creating a 
比如
>>>ogrid[0:5,0:5]   
输出: 
[array([[0],[1],[2],[3],[4]]), 
array([[0, 1, 2, 3, 4]])]    
'''
x,y=np.ogrid[:total_row,:total_col] 
# 获取图像的中心值
cen_x,cen_y=total_row/2,total_col/2  
'''   
测量从中心到每个边界像素的距离--> s**2 = (Y-y)**2 + (X-x)**2 '''
distance_from_the_center=np.sqrt((x-cen_x)**2+(y-cen_y)**2) 
# 选择半径值
radius=(total_row/2) 
# 使用逻辑操作符 '>' 
circular_pic=distance_from_the_center>radius 
'''
给所有半径外的像素值分配零值,即黑色
'''
pic[circular_pic]=0
plt.figure(figsize=(10,10))![3](https://yqfile.alicdn.com/6dffa858b5f207498da081e7341f88d0a0a69cb2.png)plt.imshow(pic)
plt.show()

 

3

卫星图像处理

       作为edX的公开课之一,下面将介绍一些卫星图像及其处理方法,这部分内容是十分有用的,下面对其进行一些处理,做一些分析任务。

# 加载图像
pic=imageio.imread('F:\satimg.jpg')
plt.figure(figsize=(10,10))
plt.imshow(pic)
plt.show()

 

4


       下面看看它的一些基本信息:

print(f'Shape of the image {pic.shape}')print(f'hieght {pic.shape[0]} pixels')print(f'width {pic.shape[1]} pixels') # 输出
Shapeoftheimage(3725,4797,3)height 3725 pixelswidth 4797 pixels

       从中可以发现一些有趣的东西,像许多其他可视化结果一样,每个rgb层中的颜色都表示对应的内容。例如,红色强弱表示像素中地理数据点的高度,蓝色强弱表示方位的度量,而绿色表示斜率,这些颜色将有助于我们以更快、更有效的方式传达信息,而不仅是显示数字。

  • 红色像素表示:高度
  • 蓝色像素表示:方位
  • 绿色像素表示:斜率
           只需看一下这张彩色图像,训练有素的眼睛就能分辨出海拔是多少,斜率是多少,方位在哪里,所以为这些颜色加载更多含义能够表示更科学的东西,一个好的想法!

检测每个通道的高像素

# 只有红色通道值,像素值高于180pic=imageio.imread('F:\satimg.jpg')red_mask=pic[:,:,0]<180 pic[red_mask]=0plt.figure(figsize=(15,15))plt.imshow(pic)  # 只有绿色通道像素值,像素值高于180pic=imageio.imread('F:\satimg.jpg')green_mask=pic[:,:,1]<180 pic[green_mask]=0plt.figure(figsize=(15,15))plt.imshow(pic)  # 只有蓝色通道像素值,像素值高于180pic=imageio.imread('F:\satimg.jpg')blue_mask=pic[:,:,2]<180 pic[blue_mask]=0plt.figure(figsize=(15,15))plt.imshow(pic) # 使用逻辑与的组合掩膜pic=imageio.imread('F:\satimg.jpg')final_mask=np.logical_and(red_mask,green_mask,blue_mask)pic[final_mask]=40plt.figure(figsize=(15,15))plt.imshow(pic)

 

5

数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!

作者信息

Mohammed Innat,机器学习和数据科学研究者
本文由阿里云云栖社区组织翻译。
文章原标题《Basic Image Data Analysis Using Numpy and OpenCV – Part 2》,译者:海棠,审校:Uncle_LLD。
文章为简译,更为详细的内容,请查看原文。

原文链接

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

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

相关文章

(需求实战_进阶_07)SSM集成RabbitMQ 订阅模式 关键代码讲解、开发、测试

接上一篇&#xff1a;&#xff08;企业内部需求实战_进阶_06&#xff09;SSM集成RabbitMQ 订阅模式 关键代码讲解、开发、测试 https://gblfy.blog.csdn.net/article/details/104219096 此项目采用MQ发送消息模式为:订阅模式&#xff0c;如果对RabbitMQ不熟悉&#xff0c;请学习…

分布式事务方案这么多,到底应该如何选型?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 温卫斌责编 | 刘晶晶源自 | dbaplus社群作者介绍温卫斌&#xff0c;就职于中国民生银行信息科技部&#xff0c;目前负责分布式技术平台设计与研发&#xff0c;主要关注分布式数据相关领域。微服务兴起的这几年涌现出不少分布…

造大专计算机学历,广昌县职业技术学校计算机应用专业助您 掌握一技之长获大专学历...

——专题宣传报道之四&#xff1a;计算机应用专业计算机应用专业一直是广昌县职业技术学校开设的特色专业。该专业由一批经验丰富、专业优秀的教师任教&#xff0c;主要学习计算机操作、组装、网络应用、影视后期制作、平面设计、文档管理等理论知识和实训课程。特色一&#xf…

阿里云正式推出消息队列Kafka:全面融合开源生态

摘要&#xff1a; 在全面兼容Apache Kafka生态的基础上&#xff0c;消息队列Kafka彻底解决Apache Kafka稳定性不足的长期痛点&#xff0c;并且支持消息无缝迁移到云上。 近日&#xff0c;阿里云宣布正式推出消息队列Kafka&#xff0c;全面融合开源生态。在全面兼容Apache Kafk…

异常将上下文初始化事件发送到类的侦听器实例_Spring的Bean实例化原理,这一次彻底搞懂了!...

前言之前分析了Spring XML和注解的解析原理&#xff0c;并将其封装为BeanDefinition对象存放到IOC容器中&#xff0c;而这些只是refresh方法中的其中一个步骤——obtainFreshBeanFactory&#xff0c;接下来就将围绕这这些BeanDefinition对象进行一系列的处理&#xff0c;如Bean…

(需求实战_01) SpringBoot2.x 整合RabbitMQ_生产端

文章目录一、依赖配置引入1. 引入SpringBoot整合RabbitMQ依赖2. 生产者配置文件3. 主配置二、代码Conding2.1. 生产者代码2.2. 实体对象2.3. 测试类一、依赖配置引入 1. 引入SpringBoot整合RabbitMQ依赖 <!--springboot整合RabbitMQ依赖--><dependency><groupI…

全域图像搜索给你更精准的搜索体验

摘要&#xff1a; 2018飞天技术汇&#xff0c;阿里巴巴机器智能技术实验室的刘磊带来题为全域精准图像搜索介绍的演讲&#xff0c;主要从四个方面进行了阐述&#xff0c;第一部分介绍了图像搜索的基本概念&#xff0c;第二部分主要是讲解了图像搜索的技术架构及其优势&#xff…

【这些都不知道你就是个弟弟】Docker常用命令

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 程序员欣宸转自 | 企业博客责编 | 阿秃除了基本的docker pull、docker image、docker ps&#xff0c;还有一些命令及参数也很重要&#xff0c;在此记录下来避免遗忘。环境信息以下是本次操作的环境&#xff1a;操作系统&…

php 模数 指数 公钥生成_php实现JWT认证

什么是JWTJWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息&#xff0c;以便于从资源服务器获取资源。比如用在用户登录上。JWT定义了一种用于简洁&#xff0c;自包…

SpringBoot2.x 整合RabbitMQ_消费端

这一篇讲解消费者 文章目录一、依赖配置1. 引入依赖2. 配置文件3. 主配置二、代码Conding2.1. 消费者代码一、依赖配置 1. 引入依赖 <!--springboot整合RabbitMQ依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>sp…

不断迭代,严苛细节,最终性能如何满足? 基于ELK的大数据平台实践分享

摘要&#xff1a; 在2018年Elastic Meetup 南京交流会中&#xff0c;来自云利来科技的涂海波为现场的听众带来了题为《南京云利来基于ELK的大数据平台》的精彩分享。在本次分享中&#xff0c;他首先进行了公司简介&#xff0c;然后介绍了数据分类&#xff0c;包括数据采集及数据…

cmd输入pip报错_pyhon3下pip安装使用教程(win10)

一、前言 pip 是 Python 包管理工具&#xff0c;该工具提供了对Python 包的查找、下载、安装、卸载的功能。官网下载比较慢,只有几k速度&#xff0c;大家如果还没下载python和pip可以到我的网盘下载。目前pip为v20.0.2版&#xff0c;pytho为v3.8.2&#xff0c;有最新版本会随时…

【小白集合】详解服务器内存和显存基础知识

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | Hardy责编 | 阿秃早期内存通过存储器总线和北桥相连&#xff0c;北桥通过前端总线与CPU通信。从Intel Nehalem起&#xff0c;北桥被集成到CPU内部&#xff0c;内存直接通过存储器总线和CPU相连。所以&#xff0c;在AMD采用So…

如何在机器学习项目中使用统计方法的示例

摘要&#xff1a; 在本文中&#xff0c;将通过十个实例介绍在机器学习项目中起关键作用的统计学方法。 统计学和机器学习是两个密切相关的领域。两者的界限有时非常模糊&#xff0c;例如有一些明显属于统计学领域的方法可以很好地处理机器学习项目中的问题。事实上&#xff0c…

云服务器 文件服务,云服务器文件服务

云服务器文件服务 内容精选换一换远程桌面协议(Remote Desktop Protocol&#xff0c;RDP)&#xff0c;是微软提供的多通道的远程登录协议。本节为您介绍如何使用RDP文件远程登录Windows云服务器。从管理控制台下载的RDP文件对应唯一的云服务器&#xff0c;当前RDP文件命名规则为…

(需求实战_03) SpringBoot整合RabbitMQ 关键代码、策略、模式讲解

这篇主讲管控台和测试 文章目录一、管控台配置1. 创建交换机2. 创建队列3. 交换机绑定队列4. 交换机查看绑定关系5. 队列查看绑定关系二、项目准备2.1. 启动测试方法2.2. 清空控制台2.3.一、管控台配置 1. 创建交换机 2. 创建队列 3. 交换机绑定队列 4. 交换机查看绑定关系…

c++ vector 初始化_什么?还不懂c++vector的用法,你凭什么勇气来的!

作者&#xff1a;良知犹存转载授权以及围观&#xff1a;欢迎添加微信公众号&#xff1a;羽林君前言今天继续肝C&#xff0c;一入C深似海。越学越有意思。今天给大家带来一篇cvector的介绍&#xff0c;难以置信这篇文章写了我三天&#xff0c;不过总算整理完毕&#xff0c;现在分…

突发!Python再次卫冕,Java和C下降,你怎么看?

2019年转眼已经大半&#xff0c;在近几个月的榜单中&#xff0c;Python已经走上卫冕的道路&#xff0c;并且与Java的差距拉得更远了一些。以往与Java常呈现你追我赶之势&#xff0c;而这一次则是直接相差了近10%&#xff01;Python的火&#xff0c;有目共睹。Python陆续登上了I…

NLP产品级系统设计模式

摘要&#xff1a; 在本文中&#xff0c;作者从六个方面描述了一些生产NLP系统的常见设计和部署模式。这些是团队为了使产品开发与技术、业务、战略和操作目标保持一致而必须做出的选择或权衡。 摘要&#xff1a;在本文中&#xff0c;作者从六个方面描述了一些生产NLP系统的常见…

2个vector如何合成一个_面试中如何做到不卑不亢,牢记2个要点

文│叨叨HR那点事(文章原创&#xff0c;版权归本作者所有&#xff0c;欢迎个人转发分享)面试的时候什么态度和面试官沟通&#xff1f;这个问题&#xff0c;就像一千个人眼里有一千个哈姆雷特一样&#xff0c;人人都有自己的意见和看法。有人说&#xff0c;面试嘛&#xff0c;当…