1.模块
2.应用
3.图像
注释:鲁棒性,也称健壮性、稳健性或强壮性,是指系统在异常和危险情况下生存的关键特性。
3.1 数字图像的定义:
数字图像作为2D图像,可以使用称为像素的有限数字集进行表示。
3.2 RGB模型:
是一种加法颜色模型,其中原色混合在一起就可以用来表示广泛的颜色范围。
每个原色通常表示一个通道,其取值范围为[0,255]内的整数值。
因此,每个通道共有256个离散的取值,,由于有三个不同的通道,使用24位来表示。
3.3 像素:
在RGB颜色模型中,将像素值表示为RGB三元组,(r,g,b)
分辨率为800*1200的图像是一个包含800列和1200行的网格,每个网格就称为一个像素。
因此其中包含96万像素。
3.4 PPI:
像素的大小取决于为该图像设置的每英寸像素数(pixels per inch,PPI)
图像的PPI一般设置在[200,400]之间。
计算PPI的公式如下:
PPI=宽度(像素)/图像宽度(英寸)
PPI=高度(像素)/图像高度(英寸)
例如:一个4*6英寸图像,图像分辨率为800*1200,则PPI是200。
3.5 图像描述:
图像可以描述为二维函数f(x,y)
其中,(x,y)是空间坐标,f(x,y)是在(x,y)处的亮度或灰度或颜色值。
当(x,y)和f(x,y)均为有限离散量时,该图像被称为数字图像。
此时:
h是图像的高度,y是图像的宽度,L=256(对于8位灰度图像)
彩色图像也可以用同样的方式表示,只不过需要三个函数来分别表示红、绿、蓝。
黑白图像可以表示为相同形式,仅需要一个函数来表示图像,且f(x,y)仅能取两个值。通常,0表示黑色,1表示白色。
3.6 图像压缩:
分为有损压缩和无损压缩,对图像进行反压缩,无损压缩得到与原图像完全等价的图像,有损压缩得到的图像与原图像并不等价。在许多有损压缩算法中,压缩级别是可以调整的。
3.7 opencv中的通道顺序:
颜色通道顺序为BGR。matplotlib采用RGB。
如何处理两个库采用的不同颜色格式:
import cv2
import matplotlib.pyplot as plt
import numpy as np
# #加载图像
img_OpenCV=cv2.imread('img.jpeg')
#分割图像
b,g,r=cv2.split(img_OpenCV)
#合并通道
img_matplotlib=cv2.merge([r,g,b])
# subplot(matplotlib) 将多个图像放在同一窗口中 subplot(m,n,p)
# m确定行数,n确定列数,p确定在网格中放置的位置
# 显示图像 matplotlib 使用imshow函数
plt.subplot(121)
plt.imshow(img_OpenCV)
plt.subplot(122)
plt.imshow(img_matplotlib)
plt.show()
cv2.imshow('bgr image',img_OpenCV)
cv2.imshow('rgb image',img_matplotlib)
cv2.waitKey(0)
cv2.destroyAllWindows()
3.8 如何拼接图像(numpy):
#想要构建一个包含着两个图象的拼接图象,将两张图片水平拼接起来。
#使用numpy的concatenate axis=0按行拼接 axis=1按列拼接
#提供了一个用于数组拼接的函数,该函数可以将多个数组沿一个指定的轴方向进行拼接,生成一个新的数组。
img_concatenate=np.concatenate((img_OpenCV,img_matplotlib),axis=1)
cv2.imshow('BGR image and RBG image',img_concatenate)
cv2.waitKey(0)
cv2.destroyAllWindows()
3.9 numpy的切片:
#cv2.split()比较耗时。如果确实需要划分不同通道,可以考虑使用numpy索引
#numpy切片
# b = a[i:j] 表示复制a[i]到a[j-1],以生成新的list对象
# i缺省时默认为0,即 a[:n] 代表列表中的第一项到第n项,相当于 a[0:n]
# j缺省时默认为len(alist),即a[m:] 代表列表中的第m+1项到最后一项,相当于a[m:5]
# 当i,j都缺省时,a[:]就相当于完整复制a
#b = a[i:j:s]
# 这里的s表示步进,缺省为1.(-1时即翻转读取)
# 所以a[i:j:1]相当于a[i:j]
B=img_OpenCV[:,:,0]
G=img_OpenCV[:,:,1]
R=img_OpenCV[:,:,2]
#一条语句进行转换
img_mpl=img_OpenCV[:,:,:,-1]
3.10 图像的属性:
通过cv2.imread()函数读取图像。
3.10.1 shape:
img_OpenCV=cv2.imread('img.jpeg')
print(img_OpenCV.shape)
行、列、通道的数量(如果图像是彩色的)
3.10.2 size:
img_OpenCV=cv2.imread('img.jpeg')
print(img_OpenCV.size)
图像的大小(图像高度*图像宽度*图像通道数)
3.10.3 图像数据类型:
img_OpenCV=cv2.imread('img.jpeg')
print(img_OpenCV.dtype)
像素值在[0,255]范围内,图像数据类型是uint8 unsigned char
3.11 显示图像:
cv2.imshow()
窗口会自动适应图片的大小。
第一个参数为窗口名,第二个参数为要显示的图像。
3.12 键盘绑定函数waitKey():
它为任何键盘事件等待指定的毫秒数,参数是以毫秒为单位的时间。
当执行到此函数时,程序将暂停执行,当按下任何键后,程序将继续执行。
毫秒数为0时,它将无期限的等待键盘敲击事件。
3.13 访问某个像素值:
获得(x=10,y=20)处的像素值
(b,g,r)=img[10,20]
处理某个区域的像素值
area=img[0:50,0:50]
3.14 关闭并释放所有的窗口:
cv2.destroyAllWindows()
3.15 灰度图像访问和操作:
灰度图像只有一个通道。
3.15.1 加载灰度图像:
gray_img=cv2.imread('img.jpeg',cv2.IMREAD_GRAYSCALE)
cv2.IMREAD_GRAYSCALE
是一个标志位,指定读取图像的方式。
3.15.2 灰度图像的属性:
1)shape
只能得到行和列
2)像素强度
i=gray_img[6,40]
4.总结: