摘要: 使用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()

注意图像的路径问题.之后需要考虑转储这个显示的图像。假设对于任何情况,我们都想要滤除掉低于某值的所有像素值,并假设该阈值设置为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()

掩膜

图像掩膜是一种图像处理技术,被广泛用于去除具有模糊边缘、透明或毛刺部分的照片背景,看起来类似于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()

卫星图像处理

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

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

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

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)

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

作者信息

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

原文链接

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

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

    引言 本文是使用python进行图像基本处理系列的第三部分,在本人之前的文章里介绍了一些非常基本的图像分析操作,见文章<使用Numpy和Opencv完成图像的基本数据分析Part I>和& ...

  2. Python 对图像进行base64编码及解码读取为numpy、opencv、matplot需要的格式

    Python 对图像进行base64编码及解码读取为numpy.opencv.matplot需要的格式 1. 效果图 2. 源码 参考 这篇博客将介绍Python如何对图像进行base64编解码及读取 ...

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

    云栖君导读: 随着科技的进步,使用Python包访问数字图像的内部变得更容易理解其属性和性质,掌握对数字图像处理的能力显得十分有必要. 对于深度学习而言,很多任务都是与数字图形处理打交道.这类任务的数 ...

  4. Python,OpenCV骨架化图像并显示(skeletonize)

    Python,OpenCV骨架化图像并显示(skeletonize) 1. 效果图 2. 源码 参考: 1. 效果图 自己画一张图,原图 VS 骨架效果图如下: opencv logo原图 VS 骨架 ...

  5. 使用Python,OpenCV制作图像Mask——截取ROIs及构建透明的叠加层

    使用Python,OpenCV制作图像Mask--截取ROIs及构建透明的叠加层 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用OpenCV制作Mask图像掩码.使用位运算和图像掩码允许我们只 ...

  6. 使用Python,OpenCV实现图像和实时视频流中的人脸模糊和马赛克

    使用Python,OpenCV实现图像和实时视频流中的人脸模糊和人脸马赛克 1. 效果图 2. 原理 2.1 什么是人脸模糊,如何将其用于人脸匿名化? 2.2 执行人脸模糊/匿名化的步骤 3. 源码 ...

  7. 使用Python和OpenCV检测图像中的条形码

    使用Python和OpenCV检测图像中的条形码 1. 效果图 2. 算法的步骤 3. 源码 参考 这篇博客将介绍使用计算机视觉和图像处理技术进行条形码检测的必要步骤,并演示使用Python编程语言和 ...

  8. 使用Python,OpenCV查找图像中的最亮点

    Python,OpenCV找出图像中的最亮点 1. 原理 2. 优化 3. 效果图 4. 源码 参考 这篇博客将向您展示如何使用Python和OpenCV查找图像中的最亮点,以及应用单行预处理代码-- ...

  9. 使用Python,OpenCV计算图像直方图(cv2.calcHist)

    使用Python,OpenCV计算图像直方图(cv2.calcHist 1. 效果图 2. 原理 2.1 什么是图像直方图? 2.2 计算直方图 2.3 可视化蒙版区域 3. 源码 参考 这篇博客将介 ...

最新文章

  1. java 查找一行_Java培训之工具类通用的查询一行多列,非实体
  2. 使用Dockerfile制作镜像
  3. 罗永浩直播带货观后感!首秀破纪录,罗永浩直播带货清单及感受
  4. 语音识别2:CTC对齐的算法
  5. Linux系统常用磁盘阵列RAID5
  6. 个人作业——软件工程实践总结
  7. J2SE 基础入门,从事 Java 必学!
  8. 大数据工作流_大数据和人工智能时代下的数字化工作流
  9. 第三代英特尔至强可扩展处理器,英特尔数据中心的“芯法宝”
  10. 基数排序 java_JAVA排序算法之基数排序
  11. (转)Spring Boot (十五): Spring Boot + Jpa + Thymeleaf 增删改查示例
  12. ethtool---查看网卡
  13. 程序设计与c语言区别,c语言程序设计和c程序设计有什么区别啊
  14. VMware搭建PXE无盘工作站,出现这种问题各位遇到过吗?
  15. 无限享受百度文库,财富值无视
  16. CMMI认证过程中实施步骤详解
  17. WSO2 ——(10)ESB功能:服务编排
  18. c:\windows\ ntdetect failed
  19. arduino/Mixly心知天气
  20. WimTool安装使用方法

热门文章

  1. python 文件加密_python实现文件快照加密保护的方法
  2. python import如何使用_python之import引用
  3. 如何计算给定一个unigram语言模型_CS224n笔记[5]:语言模型(LM)和循环神经网络(RNNs)...
  4. web中间件_常见web中间件拿shell
  5. linux内网安装git,一键安装GitLab7在RHEL6.4上
  6. android 搜索工具栏,Android记事本在菜单栏添加搜索按钮方法
  7. 原来数学才是世界上最浪漫的学科!
  8. 211高校博士生入住隔离宿舍,疫情防控下科研进度不能停!
  9. 2021年自然语言处理(NLP)算法学习路线!
  10. 全面取消校园全封闭管理!这个省发通知了!那北京呢?