【OpenCV学习】(三)色彩及矩阵 *** 作

【OpenCV学习】(三)色彩及矩阵 *** 作,第1张

【OpenCV学习】(三)色彩及矩阵 *** 作 【OpenCV学习】(三)色彩及矩阵 *** 作 背景

之前主要介绍了数据的读取和展示 *** 作,本篇将开始介绍数据的简单处理 *** 作;

一、颜色空间转换

1、介绍一些常见的颜色空间

RGB:人眼的色彩空间;

BGR:OpenCV默认使用的色彩空间;

HSV的说明:

  • Hue:色相,即色彩如红色、绿色;
  • Saturation:饱和度,颜色的纯度;
  • Value:明亮度;

2、转换色彩空间

cvtColor(原始数据,变换格式);

变换格式有很多种,例如:COLOR_BGR2RGB、COLOR_BGR2BGRA等;

代码案例:

cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
二、Numpy基本 *** 作

Numpy使用原因:

1、OpenCV中用到的矩阵都要转换成Numpy数组;

2、Numpy是一个经过高度优化的Python数值库;

相信大家对于Numpy都比较熟悉,这里主要来回顾一下:

1、创建矩阵

  • 创建数组:array()
  • 创建全0数组:zeros()/ ones()
  • 创建全值数组:full()
  • 创建单位矩阵:identity()/ eye()

2、Numpy的检索

需要注意的是,我们访问img[y,x]的时候,第一个元素代表竖轴,第二个元素代表横轴;

如果想要给一个像素点中的某个通道赋值,也可以如下:

img[100, 100] = [0, 0, 255]		# B,G,R分别赋值

3、获取子矩阵(ROI)

举个例子,得到图像的一个ROI区域:

img = cv2.imread('test2.jpg')
roi = img[100:400, 200:400, :]

当然不只有这一种用法,还有很多的使用方式,在实际工程中可以多尝试;

三、Mat

定义:从Python角度来说Mat就是一个矩阵,也是R、G、B的组合;

Mat属性

Mat拷贝

Mat的拷贝形式有两种:浅拷贝与深拷贝;

浅拷贝示意图:

代码实现:

A = cv2.imread("test.jpg")
B = A

特点:改变B的数据,A也会发生改变;

深拷贝代码实现:

A = cv2.imread("test.jpg")
B = A.copy()

特点:不会改变原来Mat的数据,是将Data数据拷贝一份;

图像属性
  • img.shape:图像的高度、长度和通道数;
  • img.size:图像占用空间大小(高度 x 长度 x 通道数);
通道的分离与合并

使用API:

  • split(mat):分离通道;
  • merge((ch1,ch2,ch3)):合并通道;

代码案例:

b, g, r = cv2.split(img)
img2 = cv2.merge((b, g, r))
总结

本篇讲的比较基础,主要是介绍一些基础知识,对于了解图像和Mat的可以直接跳过本篇学习;下一篇将讲解图像的绘制,这样是为之后的项目做一个铺垫;

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5578866.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存