2022-12 opencv教程 task2

图像色彩空间转换

图像色彩空间

  • 人眼的可见光区域 紫外 可见光 红外
  • 常见的色彩空间 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表示模板

浙ICP备19012682号