使用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))
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 pixels

width 4797 pixels

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

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

检测每个通道的高像素

# 只有红色通道值,像素值高于180

pic=imageio.imread('F:\satimg.jpg')

red_mask=pic[:,:,0]<180 

pic[red_mask]=0

plt.figure(figsize=(15,15))

plt.imshow(pic)  

# 只有绿色通道像素值,像素值高于180

pic=imageio.imread('F:\satimg.jpg')

green_mask=pic[:,:,1]<180 

pic[green_mask]=0

plt.figure(figsize=(15,15))

plt.imshow(pic)  

# 只有蓝色通道像素值,像素值高于180

pic=imageio.imread('F:\satimg.jpg')

blue_mask=pic[:,:,2]<180 

pic[blue_mask]=0

plt.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]=40

plt.figure(figsize=(15,15))

plt.imshow(pic)

5

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

作者信息

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

相关文章
|
3月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
801 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
4月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
68 4
|
1月前
|
计算机视觉 Python
PIL图像转换为Numpy数组:技术与案例详解
本文介绍了如何将PIL图像转换为Numpy数组,以便利用Numpy进行数学运算和向量化操作。首先简要介绍了PIL和Numpy的基本功能,然后详细说明了转换过程,包括导入库、打开图像文件、使用`np.array()`或`np.asarray()`函数进行转换,并通过打印数组形状验证转换结果。最后,通过裁剪、旋转和缩放等案例展示了转换后的应用,以及如何将Numpy数组转换回PIL图像。此外,还介绍了处理base64编码图像的完整流程。
43 4
|
2月前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
58 2
|
4月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
3月前
|
机器学习/深度学习 数据采集 算法
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
【10月更文挑战第5天】随着数据科学和机器学习领域的快速发展,处理大规模数据集的能力变得至关重要。Python凭借其强大的生态系统,尤其是NumPy、Pandas和SciPy等库的支持,在这个领域占据了重要地位。本文将深入探讨这些库如何帮助科学家和工程师高效地进行数据分析,并通过实际案例来展示它们的一些高级应用。
89 0
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
|
3月前
|
数据采集 数据挖掘 API
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
在Python数据分析的世界里,Pandas和NumPy无疑是两颗璀璨的明星,它们为数据科学家和工程师提供了强大而灵活的工具集,用于处理、分析和探索数据。今天,我们将一起深入探索这两个库的高级功能,看看它们如何成为数据分析的加速器。
63 1
|
3月前
|
数据挖掘 索引 Python
Python数据分析篇--NumPy--进阶
Python数据分析篇--NumPy--进阶
31 0
|
3月前
|
数据挖掘 索引 Python
Python数据分析篇--NumPy--入门
Python数据分析篇--NumPy--入门
61 0
|
5月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)

热门文章

最新文章