基础知识

一、numpy

1.简介

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

2.数组创建

数组类型

Numpy中的数组的使用和python中列表非常类似,区别如下:

  1. 列表可以存储多种数据类型,numpy只能存储相同数据类型。
  2. 数组可以是多维的,当数据类型是数值类型时,相当于线性代数中的矩阵,是可以进行相互间的运算的。

三个属性

  • 数据类型 dtype
  • 维度 ndim 有几个方括号,就有几个维度
  • 形状 shape

创建数组

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
#1.列表转化
a=np.array([1,2,3,4])
#如果列表中有非数值类型,所有类型转化为相同类型
b=np.arange(2,21,2) #和range函数相同(起始,结束,步长)
c=np.random.random((2,2)) #生成两行两列的随机数组,里面是0-1的数值
d=np.random.randint(4,8,(2,2,2)) #生成4-8之间,2x2x2的数组
e=np.zeros((2,2)) #生成全为0的3x3的矩阵
f=np.ones((3,3)) #生成全为1的3x3的矩阵
g=np.full((3,3),8) #生成3x3的值全为8的数组
h=np.eye(3) #生成三阶单位对角矩阵

i=np.ones((3,3),dtype=uint8) #可以声明类型

数组数据类型

类型 解释
bool_ 布尔型数据类型(True 或者 False)
int_ 默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
intc 与 C 的 int 类型一样,一般是 int32 或 int 64
intp 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
int8 字节(-128 to 127)
int16 整数(-32768 to 32767)
int32 整数(-2147483648 to 2147483647)
int64 整数(-9223372036854775808 to 9223372036854775807)
uint8 无符号整数(0 to 255)
uint16 无符号整数(0 to 65535)
uint32 无符号整数(0 to 4294967295)
uint64 无符号整数(0 to 18446744073709551615)
float_ float64 类型的简写
float16 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
float32 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
float64 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
complex_ complex128 类型的简写,即 128 位复数
complex64 复数,表示双 32 位浮点数(实数部分和虚数部分)
complex128 复数,表示双 64 位浮点数(实数部分和虚数部分)

3.基本运算

基本运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 加减乘除
B = A + 2
C = A / 2
D = A*B #逐个相乘
D =A @ B #矩阵相乘
A.dot(B) #矩阵乘法
# 平方、开根、对数
B = np.power(A, 0.5)
C = np.sqrt(A)
D = np.log(A)

# 最大值、最小值、平均值
ma1 = A.max()
ma2 = np.max(A) #最大值

mi1 = A.min(axis=0)
mi2 = np.min(A, axis=0) #某一行最小值

me1 = A.mean(axis=1)
me2 = np.mean(A, axis=1)

矩阵变换

1
2
3
4
5
6
7
8
9
#矩阵转换
A.reshape((-1,9)) #维度为-1的数据将会自动计算,转后为
A.flatten() #转成一维数据
A。ravel() #转成一维
#矩阵转置
B.T
B.transpose()
np.hstack([A,B]) #将两个数组水平连接在一起
np.vstack([A,B]) #将两个数组水平连接在一起

4.元素获取

1
2
3
4
5
B			#获取全部
B[0,:] #第0行,所有列
B[1:,1:] #从第0行第0列往后切
B[1:3,1:3] #1,2行的1,2列,,不包含3行3列
B[0,0] = 10 #0行0列赋值为10(可整块赋值

二、OpenCV

1.简介

opencv 是用于快速处理图像处理、计算机视觉问题的工具,支持多种语言进行开发如c++、python、java等。本教程所有示例基于opencv-python,使用python语言对数字图像进行处理和研究。

2.使用

1
2
3
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

读取显示图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
img1 = cv.imread('./pic/bear500x333.jpg')	#读取图片

cv.imshow('bear',img1) #显示图片
cv.waitkey(0) #弹窗等待时间
cv.destroyAllWindows() #关闭窗口


img1 = cv.cvtColor(img1, cv.COLOR_BGR2RGB) #转换读取通道 RGB和BGR
plt.imshow(img1) #显示图片
plt.show()

img=cv.imread('./pic/bear500x333.jpg',0) #灰度图

#使用plt显示时灰度图会以热力图的方式表示出来
plt.imshow(img1,cmap='gray') #显示图片
plt.show()

函数封装

1
2
3
4
5
6
def show(img):
if img.ndim ==2:
plt.imshow(img,cmap='gray')
else:
plt.imshow(cv.cvtColor(img1, cv.COLOR_BGR2RGB))
plt.show()

3.图像绘制

plot

1
2
3
4
5
6
7
8
9
10
11
12
13
plt.plot(x,y)		#绘制图像
plt.show()

plt.plot(x,y,'r+-') #绘制图像,红色、+表示点、-为线
plt.plot(x,y,'+-',color='r')

plt.plot(x,y1,label="biaoqian") #使用标签
plt.plot(x,y2,label="biaoqian2")
plt.legend9() #显示标签
plt.xlabel("x") #x轴标签
plt.xlim([0,1]) #x轴范围
plt.grid() #显示网格

hist

1
2
3
4
5
6
plt.hist(a,rwidth=0.9,color='g')	#数据a的柱状图,宽度0.9,绿色
plt.show()

bins = np.arange(-0.5, 10, 1)
plt.hist(a,bins) #设置横坐标
plt.show()