05 图像色彩空间转换
常见的色彩空间:HSV、RGB、YCrCb
- RGB色彩空间,设备独立
- HSV色彩空间,对计算机友好,区分各种色彩
- YCrCb, Y分量表示信息,CrCb可以被压缩
RGB是计算机显示器的标准支持色彩系统
RGB的取值范围0~255
HSV取值范围H(色调):0°~360°,S(饱和度):0~255,V(明度):0~255
从一个色彩空间转换到另外一个色彩空间要考虑:
信息传递与损失过程、可逆与不可逆
函数与参数
cv.cvtColor(src,code[,dst[,dstCn]])->dst
· src表示输入图像, 类型CV_8U、CV_32F
· code表示,
cv::COLOR_BGR2RGB = 4
cv::COLOR_BGR2GRAY = 6
cv::COLOR_GRAY2BGR = 8
cv::COLOR_BGR2HSV = 40
例:img2 = cv.cvtColor(img1, cv.COLOR_BGR2GRAY)
注:当彩色图像转为灰度图像,由三通道转为单通道,其部分信息永久消失,再次转回BGR后图像变为三通道,但仍为灰色。
06 图像对象的创建与赋值
① OpenCV-Python支持的数据类型:np.uint8(默认)、np.float32(方便计算)、np.int32、np.int64
② Numpy常用函数:
numpy.array、numpy.zeros、numpy.zeros_like(快速产生与读入图像尺寸相同的纯黑图像)、numpy.asarray(将普通数组转为NumpyArray)、numpy.copy(复制图像)、numpy.reshape(各种转换)
函数解释:
(1)
numpy.array(object, dtype=None, *, copy=True, order=’K’, subok=False, ndmin=0, like=None)
object 数组
dtype 数据类型
(2) numpy.zeros(shape, dtype=float, order=‘C’, *, like=None)
数组维度
dtype 数据类型
(3) numpy.asarray(a, dtype=None, order=None, *, like=None)
数组对象
dtype 数据类型
(4) numpy.reshape(a, newshape, order=’C’)
数组维度
dtype 数据类型
③ 概念
opencv-python中一切图像数据皆numpy array
创建图像就是创建numpy array
④ 创建图像
1)导入import numpy as np
2)创建np.array([[1, 2],[3, 4]], dtype=np.uint8)
3)创建图像最常用函数:
- np.zeros ->创建一个黑色背景图像
- np.zeros_like->创建一个与输入图像大小一致的黑色背景图像
- np.ones创建一个全部像素值是1的图像
⑤ 图像赋值
图像赋值就是给numpy array数组赋值
m = np.zeros((3, 3, 3), dtype=uint8)
m[:] = 255,创建数组m,然后赋值为255(白色)
m[:] = (255,0,0),创建数组m,然后赋值为(255,0,0)蓝色
h,w,c = img.shape,h,w,c分别为高,宽,通道
07 图像像素的读写操作
理解像素:
像素实际大小:dpi x inches = 像素总数
术语dpi:每英寸的点数目,96dpi – 针对打印
术语ppi: 每英寸的像素数目 – 针对图像分辨率
OpenCV中像素
- 矩阵表示每个像素信息
- 像素遍历本质就是numpy数组访问
假设变量image
获取图像维度信息: image.shape
图像访问像素: image[row, col]
图像赋值像素: image[row, col] = (b,g,r)
读写像素,彩色图像:
b, g, r = image[row, col]
image[row, col] = (255-b, 255-g, 255-r)
读写像素,灰度图像:
pv = image[row, col]
image[row, col] = 255-pv
08 图像算数操作
图像读取后是一个数组,它可以进行基本的算术操作
加 cv.add(src1, src2[, dst[, mask[, dtype]]]) ->dst
减 cv.subtract(src1,src2[,dst[,mask[,dtype]]])->dst
mask参数控制操作范围,操作范围内正常加减,范围外全为0
乘 cv.multiply(src1,src2[,dst[,scale[,dtype]]])->dst
除 cv.divide(src1, src2[, dst[, scale[, dtype]]])->dst
参数说明 src1 & src2表示图像
加法运算保证不越界的方法:saturate(src1 + src2)-》0~255。saturate_cast函数的作用即是:当运算完之后,结果为负,则转为0,结果超出255,则为255。
图像算术运算要求:图像大小通道数目一致
加权加法:added_wt_img = cv2.addWeighted(img1, 0.6, img2, 0.4, 0)
mask表示模板(蒙版),为矩阵形式,矩阵中0,表示不取该位置的值,1表示保留该位置的值。