Python OpenCV图像处理:色彩空间转换与NumPy数组操作教程

创始人
2024-12-28 01:05:40
0 次浏览
0 评论

Python3OpenCV3图像处理-色彩空间

色彩空间是一个使用数学坐标来表示颜色的概念。
该坐标可用于将不同频率的光的感知转换为特定的坐标位置,从而定义颜色范围。
色彩空间来源于ColorSpace,也称为色彩空间。
颜色科学中的各种颜色模型通过一维、二维、三维甚至四维空间坐标来表示颜色,这些坐标系共同构成了颜色空间。
图像处理中常见的颜色空间有:1、RGB颜色空间:将颜色分解为红、绿、蓝,通过组合这些颜色得到不同的颜色。
它是显示设备中最常用的颜色模型。
2.HSV颜色空间(HueSaturationValue):由三个元素组成:颜色的色调(Hue)、饱和度(Saturation)和值(Value)。
HSV颜色空间使理解和描述颜色属性变得更加容易。
3.HIS(HueIntensitySaturation)颜色空间:该空间通过将色调映射到正弦波上的强度值来表示颜色,通常用于图像处理中的色调调整。
4、YCrCb颜色空间(LuminanceChrominance):结合了亮度和色度信息,广泛应用于视频压缩和显示设备中。
5.YUV颜色空间:由亮度(Y)和色度(U和V)信号组成。
U和V代表红色和蓝色之间的差异。
此色彩空间适合电视和显示器上的色彩再现。
颜色空间之间的转换是图像处理中常用的操作。
最常见的是:1.HSV和RGB之间的转换:在HSV颜色空间上实现颜色匹配和分类操作,然后转换回RGB空间进行显示或存储。

2、YUV和RGB之间的转换:种转换特别适合视频处理和图像压缩,例如视频编码和解码中使用的那些。
以下是使用OpenCV和Python进行颜色空间转换的示例代码:pythonimportcv2ascvimportnumpyasnpdefextract_object_demo(image):capture=cv.VideoCapture("src/video.mp4")while(True):ret,frame=capture.read()ifnotret:break;hsv=cv.cvtColor(frame,cv.COLOR_BGR2HSV)lower_hsv=np.array([37,43,46])upper_hsv=np.array([77,255,255])mask=cv.inRange(hsv,lower_hsv,upper_hsv)cv.imshow("视频",frame)cv.imshow("掩码",m问)ifcv.waitKey(40)==27:breakdefcolor_space_demo(image):gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)cv.imshow("gray",gray)hsv=cv.cvtColor(图像,cv.COLOR_BGR2HSV)cv.imshow("hsv",hsv)yuv=cv.cvtColor(图像,cv.COLOR_BGR2YUV)cv.imshow("yuv",yuv)src=cv.imread("src/fish.jpg")cv.imshow("importimage",src)b,g,r=cv.split(src)cv.imshow("蓝色",b)cv.imshow("绿色",g)cv.imshow("红色",r)src[:,:,2]=0src=cv.merge([b,g,r])cv.imshow("changedimage",src)t1=cv.getTickCount()color_space_demo(src)t2=cv.getTickCount()时间=(t2-t1)/cv.getTickFrequency()*1000print("time:%sms"%time)cv.waitKey(0)cv.destroyAllWindows()运行上述代码可以显示原始版本的彩色图像和图像在不同色彩空间的变换效果。

Python自学笔记(九)——NumPy

NumPy是Python编程语言中用于科学计算的重要库之一。
主要对象是同态多维数组。
数组的属性有:1.`array.ndim`:数组的轴数(维度),也称为秩。
2.`array.shape`:数组的维度是整数的元组,表示每个维度的大小,例如矩阵的行数和列数。
3.`array.size`:数组元素总数等于形状元素的乘积。
4.`array.dtype`:描述数组中元素类型的对象。
您可以使用标准Python类型,例如“numpy.int32”、“numpy.int16”和“numpy.float64”,或特定于NumPy的类型。

5.`array.itemsize`:数组中每个元素的大小(以字节为单位)。
6.`array.data`:包含数组实际元素的缓冲区,通常无需直接访问。
创建数组的方法如下:1.指定要为其创建数组的类型。
2.创建一个0矩阵、一个全1矩阵、一个“空”矩阵等。
数组基本操作是:1.添加矩阵。
2.矩阵元素相乘。
3.矩阵乘法。
4.对矩阵进行连续运算。
5、矩阵运算后的数字类型。
6、矩阵元素的简单统计。
7.矩阵的轴运算。
8、常用函数(对元素的操作)如`absolute`、`add`、`arccos`(反三角余弦)等。
数组索引、切片和遍历:1、一维数组的索引、切片和遍历。
相当于“列表”。
2.多维数组的索引、切片和遍历。
形状操作包括:1.更改数组的形状而不更改原始数组(例如`ravel`、`reshape`、`T`)。
2.在更改原始数组时更改数组的形状(例如“调整大小”)。
数组的堆叠和割:1.垂直堆叠(`vstack`)和水平堆叠(`hstack`)。
2.水平分割(`hsplit`)和垂直分割(`vsplit`)。
广播规则允许通用函数处理形状不完全相同的输入,确保所有数组大小匹配。
一些很酷的索引和索引技术包括:1.使用索引数组进行索引。
2.使用布尔数组进行索引。
3.使用“ix_()”函数实现笛卡尔积索引。
使用字符串创建索引。
线性代数运算包括:1.矩阵转置。
2.求解矩阵方程(张量方程)。
3.求解线性方程。
4.计算逆矩阵。
5.计算N维矩阵的反函数。
6.Cholesky分解和QR分解。
7.计算矩阵的特征值和特征向量。
8.计算矩阵的行列式。
结构化数组是包含多个不同数据类型和大小的字段的数组,用于存储复杂的数据结构。
结构化数组的操作如下:1.创建结构化数据类型。
2.操作和显示结构化数据类型。
自动字节偏移和对齐通过确保结构化数据类型的优化内存布局来提高性能。
字段标头提供用于索引数组的附加信息。
结构化数组分配包括:1.Python原始类型的赋值。
2.标量赋值。
3.来自另一个结构化数组的赋值。
结构化数组索引包括:1.访问单个字段。
2.访问多个字段。
3.使用整数索引获取结构化标量。
结构比较涉及确定两个void结构数组是否相等。
这涉及到测试。
文章标签:
Python OpenCV
热门文章
1
Python中的format()方法:字... formatformat在python中的含义2222.22E+00Format...

2
Python编程入门:全面解析Pytho... python的基本语法基本的Python语法如下:1.变量的定义。在编程语言中,...

3
Python字符串大小写转换方法全解析 python中字母的大小写转换怎么实现?在Python中,大小写转换由内置函数处...

4
Python字典:轻松获取最小值键与计算... python在一个字典里,返回值最小元素对应的键,救解在Python字典中,如果...

5
Python字符串去重空格:strip(... Python去除字符串中空格(删除指定字符)的3种方法在Python编程中,处理...

6
Python数组元素数量计算技巧分享 Python输出数组有多少个元素?简介:在本文中,首席CTO笔记将向您介绍Pyt...

7
简述python中pass的作用 pass语句的作用在许多编程语言中,包括Python;PASS语句用于在代码块中...

8
Python def 关键字详解:函数定... def是什么意思编程?戴夫是什么意思?def是Python中的函数定义关键字,用...

9
python不区分大小写的方法 Python字符串不区分大小写在Python中,字符串操作默认区分大小写。但有时...

10
Python字典操作全解析:添加、修改、... Pythondict字典基本操作(包括添加、修改、删除键...