python扩展库numpy的简单介绍

与图像相关的知识。


前言

要对一张图片进行处理,首先需要获取这张图片。可以使用相机和手机等工具获取一张彩色图片,并且以一种特定的格式保存在自己的磁盘中。所以在处理图像时,需要通过某种方式获取图像,同时以某种类型把它存放在一个容器里,并且展示给用户。


提示:以下是本篇文章正文内容,下面案例可供参考

一、图像表示

数字图像在计算机中是以矩阵形式进行存储的,矩阵中的每一个元素都描述一定的图像信息,如亮度、颜色等信息。数字图像处理就是通过一系列矩阵运算过程从而提取重要信息。在python中,图像被读取进来后,被保存在一个N维数组对象ndarray中,此后的图像处理操作都是依赖于这个多维数组。

二、Numpy相关介绍

1.ndarray对象及常用的属性

ndarray在numpy中可以进行快速数学运算、具有广播能力且节约空间的N维数组对象,可在数组处理中灵活使用。

(1)ndarray.shape属性

这个函数表示数组的维数,返回一个元组,元组的长度即ndim(维度)。此属性可以获取图像的尺寸,对于灰度图像img,img.shape返回的数据(n,m)n表示n行,m表示m列;而对于三通道的彩色图像img0,img0.shape返回的数据(n,m,3),表示3个n行和m列的BGR图像。

(2)ndarray.dtype属性

这个函数的作用是表示数组中元素的数据类型。图像在计算机存储主要由像素矩阵构成,每个像素值的大小决定了图像的质量。如果用8位无符号整数存储16位图像,会造成图像颜色的改变,从而显示错误的图像。

(3)numpy的数据类型

数据类型取值范围C++
uint8 (8位无符号整数)0-255cv-8u
int8 (8位符号整数)-128-127cv-8s
uint16(16位无符号整数)0-65535cv-16u
int16(16位符号整数)-32768-32767cv-16s
int32 (32位符号整数)-2147483648-2147483647cv-32s
float32(32位单精度浮点数)-FLT_MAX-FLT_MAX,INF,NANcv-32F
float64(64位双精度浮点数)-DBL_MAX-DBL_MAX,INF,NANcv-64F

(4)ndarray.ndim属性

函数表示数组的维度。在图像中可以用来表示图像的通道数(channel)。需要注意的是在C++中灰度图的通道数img.channel=1,而在numpy中灰度图像img.channel=2.
在opencv中,通常使用C1、C2、C3、C4分别表示单通道、双通道、三通道以及四通道

(5)ndarray.size属性

函数表示数组元素的总个数,在图像中常用它来计算数组中的像素个数。
在我们使用opencv-python读取一张图片成功后,会分别输出图像的四个属性。

提示结果
图像的形状(480,320,3)
元素类型uint8
图像通道数3
像素总数460800

ndarray.size的作用就是将图像的像素总数进行计算表示,计算的过程,例如BGR色彩图像,图像的尺寸(480,320,3),利用ndarray.size计算得到的结果应该4803203,最终结果为460800.

2.Numpy常用的函数

1.创建ndarray对象

由于在python中导入numpy库时,常常import numpy as np导入,所以程序中np就是表示numpy库,np.array()函数属于numpy库中的一个函数,用于创建一个多维度的array数组。同时还可以利用np.ones()建立一个全为1的矩阵’利用np.zeros()可以建立一个全0矩阵。

2.ndarray对象的索引以及切片

在对图像处理时,常常需要对图像的某一个通道进行操作,此时就需要对ndarray对象进行切片以及索引。例如,img[0,0]可以选择灰度图像img中位于(0,0)位置上的像素;img[x1:x2,y1:y2],可以对图像进行裁剪,其中x1和y1表示图像左上角的坐标,x2和y2表示图像右下角的坐标。使用img[:,:,0]可以获取彩色图像img的蓝色通道,这个方式比opencv中的通道拆分cv.split()函数的效率要高得多。

3.ndarray对象生成随机数

np.random模块中提供了很多种可以生成多种随机数的函数,可以根据需求定义样本区间以及概率分布等。例如,在np.random.randint()函数可以从给定的范围内随机选取整数;np.random.randn()函数可以产生服从均值为0,标准差为1的正态分布的数据。

代码如下(示例):

import numpy as np
import cv2 as cv
if__name__ ==  "__mian__"
	#创建array数组对象,
	#使用np.array ()创建一个5x5、数据类型为float32的对象
	a = np.array([[1,2,3,4,5],
				   [6,7,8,9,10],
				   [11,12,13,14,15],
				   [16,17,18,19,20],
				   [21,22,23,24,25]],dtype='float32'

总结

numpy的使用极大的方便了,开发人员,如果对numpy有较深的理解,可以使得具有数组编程思维的开发人员写出更加高效的代码,在这里也只是简单地介绍一下numpy的相关知识,numpy中还有很多与矩阵有关的函数以及方式还需要我们自己去了解,这个对我们编程具有很大的帮助。其次个人能力有限,文章中有不对的地方,恳请原谅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值