图像色彩空间转换
图像色彩空间
- 人眼的可见光区域 紫外 可见光 红外
- 常见的色彩空间 HSV RGB YCrCb
- RGB色彩空间 设备独立 是计算机显示器的标准支持色彩系统 RGB的取值范围 0~255
- HSV色彩空间,对计算机友好,区分各种色彩 HSV取值范围 H: 0~180,SV: 0~255
- YCrCb,Y分量表示信息,CrCb可以被压缩
- 从一个色彩空间转换到另外一个色彩空间 信息传递与损失 过程可逆与不可逆
函数与参数
- 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
图像对象的创建与赋值
图像对象属性
- 图像宽高 image.shape
- 图像深度 image
- 图像数据类型 image.dtype
- 图像通道 image.shape
- 图和加载不同通道的图像
- 数据类型
OpenCV-Python支持的数据类型: np.uint8 np.float32 np.int32 np.int64
Numpy数据包函数
- numpy.array
numpy.array(object, dtype=None, *, copy=True, order='K', subok=False, ndim=0, like=None)
- *object 数组
- dtype 数据类型 np.uint8 np.float32 np.int32 np.int64 - numpy.zeros
numpy.zeros(shape, dtype=float, order='C', *, like=None)
- *object 数组
- dtype 数据类型 np.uint8 np.float32 np.int32 np.int64 - numpy.zeros_like 读入一张图像,产生跟读入图像一样大小的全黑图像
- numpy.asarray 转换成numpy array,opencv才会认可
numpy.asarray(a, dtype=None, order=None, *, like=None)
- *数组对象
- dtype 数据类型 np.uint8 np.float32 np.int32 np.int64 - numpy.copy 深度复制一张图像
- numpy.reshape 进行各种通道的转换
numpy.reshape(a, newshape, order='C')
- 数组维度
- dtype 数据类型 np.uint8 np.float32 np.int32 np.int64
创建图像
- opencv-python中一切图像数据皆 numpy.array
- 创建图像就是创建numpy array
import numpy as np
np.array([[1,2], [3,4]], dtype = np.uint8)
- 创建图像最常用函数
- 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) 蓝色
像素读写操作
图像像素
- 像素与分辨
理解像素
- 像素实际大小: dpi x inches = 像素总数
- 术语 dpi: 每英寸的点数目,96dpi - 针对打印
- 术语 ppi: 每英寸的像素数目 - 针对图像分辨率
OpenCV中像素
- 灰度图像排序
- 彩色图像排序
![[Pasted image 20221214182919.png]]
像素访问与遍历
- 像素遍历本质是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
像素算术操作
- 算术操作 - 加法
img1[row, col] + img2[row, col] = dst[row, col]
- 算术操作 - 减法
img2[row, col] - img1[row, col] = dst[row, col]
- 算术操作 - 乘法
img1[row, col] * img2[row, col] = dst[row, col]
- 算术操作 - 除法
img2[row, col] / img1[row, col] = dst[row, col]
支持函数
cv.add(src1, src2[, dst[, mask[, dtype]]]) -> dsr
cv.subtract(src1, src2[, dst[, mask[, dtype]]]) -> dsr
cv.multiply(src1, src2[, dst[, scale[, dtype]]]) -> dsr
cv.divide(src1, src2[, dst[, scale[, dtype]]]) -> dsr
- src1 & src2 表示图像
- 加法,保证不越界: saturate(src1 + src2) -》 0~255
Mask参数
cv.add(src1, src2[, dst[, mask[, dtype]]]) -> dsr
- src1 输入图像1, src2 输入图像2,mask表示模板