🚀写在前面🚀
🖊个人主页:https://blog.csdn.net/m0_52051577?type=blog
🎁欢迎各位大佬支持点赞收藏,三连必回!!
🔈本人新开系列专栏—python图像处理
❀愿每一个骤雨初晴之时,所有的蜻蜓振翅和雨后惊雷,都归你。
目录
一、前言
二、认识图像
三、用到的库
(1)Numpy
(2)OpenCV
(3)Matplotlib
四、代码实操
(1)矩阵创建(numpy)
1、创建方式一:常规array法创建
2、创建方式二:zero初始化法
3、创建方式三:ones创建法
4、创建方式四:单位矩阵创建
(2)三个重要属性
(3)基本操作
(4)矩阵运算
(5)获取元素
(6)绘图函数
(7)读取显示图像
注:相关图片资源可在积分资源中获取,相关链接:https://download.csdn.net/download/m0_52051577/87844285?spm=1001.2014.3001.5503
一、前言
图像处理是计算机视觉的一个重要研究领域,主要研究如何让计算机代替人眼实现对目标的分类、识别、跟踪和场景理解等内容。
二、认识图像
说明:分辨率:像素点的数量(1080P:1920✖1080)
PPI(像素密度):每英寸所拥有的像素数量
其中square表示屏幕尺寸
相同尺寸下,像素点越多,图片的分辨率越高,图片的像素密度越高,看起来也就越清晰。
三、用到的库
(1)Numpy
在图像处理中主要用于
※导入库
※元素、向量处理
※矩阵属性
※加减乘除、立方、开根
※最大值、最小值、平均值
※矩阵乘法
※元素获取
(2)OpenCV
在图像处理中主要用于
※导入库
※读取图片
※显示图片
※保存图片
(3)Matplotlib
在图像处理中主要用于
※导入库
※绘制折线图
※绘制柱状图
※绘制xy坐标
※绘制标题
※显示图片
通过前面对库的相关介绍,了解到这些库在用于图像处理中的各自分工,那么这些库是如何在图像处理中发挥作用的,下面上代码。
这里提供几个库的安装命令:
pip install numpy matplotlib -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip install pandas scipy scikit-learn scikit-image -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip install opencv-python -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip install jupyter -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip install jupyterlab -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
四、代码实操
(1)矩阵创建(numpy)
#导入库
import numpy as np
1、创建方式一:常规array法创建
A = np.array([
[1,2,3],
[4,5,6],
[7,8,9]
])
2、创建方式二:zero初始化法
B = np.zeros((3,4))
3、创建方式三:ones创建法
C = np.ones((3,4), dtype=np.int64)
E = np.ones((2,4,3))
注:其中zero函数与ones函数创建格式相同,其中(3,4)表示创建3行4列的二维数组,或三个四维行向量。 (2,4,3)表示创建一个2页4行3列的三维数组。
np.ones函数的应用非常广泛,它可以被广泛用于科学计算、图像处理、机器学习、深度学习等领域。
4、创建方式四:单位矩阵创建
D = np.identity(4)
创建4阶的单位矩阵。
(2)三个重要属性
print('A.dtype =', A.dtype) #类型
print('A.ndim =', A.shape) #表示各位维度大小的元组。返回的是一个元组。
print('A.ndim =', A.ndim) #ndim返回的是数组的维度,返回的只有一个数,该数即表示数组的维度。
A1 = A.reshape((1,9))
print(A1) # 有几个方括号,就有几个维度
A1 = A1.astype(np.float32)#转换数组的数据类型。
(3)基本操作
# 加减乘除
B = A + 2
C = A / 2
print(A)
print(B)
print(C)
# 平方、开根、对数
B = np.power(A, 0.5)
C = np.sqrt(A)
D = np.log(A)
print(B)
print(C)
print(D)
# 最大值、最小值、平均值
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)
# 转置
print(A)
print(A.T)
print(A.transpose())
print(np.transpose)
(4)矩阵运算
x = np.array([1, 1, 2])
z1 = A * x
z2 = A @ x
z3 = A.dot(x)
print(z1)
print(z2)
print(z3)
B = np.ones((3,3), dtype=np.int)
Z1 = A * B # 逐元素相乘
Z2 = A @ B # 矩阵乘法
Z3 = A.dot(B) #获取两个元素a,b的乘积
print(Z1)
print(Z2)
print(Z3)
(5)获取元素
u = np.arange(2, 10, 2)
print(u)
arange()函数:(2,10,2)获取[2,10)之间以2为步长的元素。
E = np.random.randint(0, 10, (5,5), dtype=np.int)
# 获取子矩阵
E1 = E[0:3, 0:3].copy()
print(E1)
E1.flatten()#返回一个一维数组。
(6)绘图函数
A1 = np.random.randint(0, 10, (10,10))
print(A1)
bins = np.arange(-0.5, 10, 1)
plt.hist(A1.flatten(), bins=bins, rwidth=0.8, color='green')
plt.xticks(range(0,10))
plt.show()
创建数组A1:
创建了10×10的二维数组,其中每行的元素为[0,10)的数字。
根据创建的数组绘制图像:
其中,bins是一个范围,采用-0.5到10的范围,间隔为1。
(7)读取显示图像
img1 = cv.imread('D:\\proclass\\class\\pic\\apple.jpg')
img1 = cv.cvtColor(img1, cv.COLOR_BGR2RGB)
plt.imshow(img1)
plt.show()
#读取灰度图
img2 = cv.imread('D:\\proclass\\class\\pic\\apple.jpg', 0)
plt.imshow(img2, cmap='gray')
plt.show()
输出两张图片的维度发现,图1为3维,即彩色颜色通道,图2为2维,即黑白颜色通道。