opencv学习第二天

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表示保留该位置的值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_59821479

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值