【计算机视觉】OpenCV 4高级编程与项目实战(Python版)【3

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
img

正文

  • src:转换前的初始图像数据。
  • code:色彩空间转换码。
  • dst:可选参数。dst既是参数,也是返回值,转换后的图像数据(目标图像数据)。也就是说,转换结果,可以通过cvtColor函数返回,也可以通过dst参数返回。
  • dstCn:可选参数。目标图像的通道数,默认值是0,通道数会自动通过src参数和code参数确定。

OpenCV提供的色彩空间转换码非常多,本文只给出与BGR/RGB色彩空间和GRAY色彩空间相关的转换码,如表1所示。

下面的代码将彩色图像flower.jpg从BGR色彩空间转换到GRAY色彩空间。

import cv2
image = cv2.imread("images/flower.jpg")	
# 显示彩色图像
cv2.imshow("flower", image)		
# 将BGR色彩空间的图像转换到GRAY色彩空间的图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 显示灰度图像	
cv2.imshow("GRAY", gray_image)
cv2.waitKey()
cv2.destroyAllWindows()

运行程序,会看到如图2所示的转换效果。

注意:尽管色彩空间类型的转换是双向的,而且OpenCV也提供了  cv2.COLOR_GRAY2BGR和cv2.COLOR_GRAY2RGB空间转换码,但由于彩色图像转换到灰度图像时,已经将颜色比例(也就是红色、绿色和蓝色之间的混合比例)丢失了,一旦丢失,将无法恢复。所以尽管可以使用这2个空间转换码将GRAY色彩空间抓好为BGR色彩空间和RGB**色彩空间,但转换结果仍然是灰度图像。

3. RGB色彩空间的局限性

RGB是我们接触最多的色彩空间,通过红色(R),绿色(G)和蓝色(B)这3种颜色的不同组合可以形成几乎所有的颜色。RGB 色彩空间是图像处理中最基本、最常用、面向硬件的颜色空间,比较容易理解。

RGB 色彩空间利用3个颜色分量的线性组合来表示颜色,任何颜色都与这三个分量有关,而且这3个分量是高度相关的,所以连续变换颜色时并不直观,想对图像的颜色进行调整需要更改这3个分量才行。

自然环境下获取的图像容易受自然光照、遮挡和阴影等情况的影响,即对亮度比较敏感。而 RGB 色彩空间的3个分量都与亮度密切相关,即只要亮度改变,3个分量都会随之相应地改变。

但是人眼对于这3种颜色分量的敏感程度是不一样的,在单色中,人眼对红色最不敏感,蓝色最敏感,所以 RGB 色彩空间是一种均匀性较差的色彩空间。如果颜色的相似性直接用欧氏距离来度量,其结果与人眼视觉会有较大的偏差。对于某一种颜色,我们很难推测出较为精确的3个分量数值来表示。

所以RGB 色彩空间适合于显示系统,并不适合于图像处理。

4. 适合图像处理的HSV色彩空间

在图像处理中使用较多的是 HSV 色彩空间,它比 RGB 更接近人们对彩色的感知经验。非常直观地表达颜色的色调、鲜艳程度和明暗程度,方便进行颜色的对比。

在 HSV 色彩空间下,比 RGB色彩空间更容易跟踪某种颜色的物体,常用于分割指定颜色的物体。

HSV 色彩空间表达彩色图像的方式由3个部分组成:

  • Hue(色调)
  • Saturation(饱和度)
  • Value(亮度)

用图3所示的圆柱体来表示 HSV 色彩空间,圆柱体的横截面可以看做是一个极坐标系 ,H 用极坐标的极角表示,S 用极坐标的极轴长度表示,V 用圆柱中轴的高度表示。

Hue 用角度表示,取值范围是0~360,表示色彩信息,即所处的光谱颜色的位置,如图4所示。

颜色圆环上所有的颜色都是光谱上的颜色,从红色开始按逆时针方向旋转,Hue=0 表示红色,Hue=120 表示绿色,Hue=240 表示蓝色,其他角度的颜色都是用R、G、B混合出来的颜色。

在 RGB色彩空间中,颜色由3个值共同决定,比如黄色是(255,255,0)。在HSV色彩空间中,黄色只由一个值决定,即Hue=60。

HSV色彩空间的饱和度(Saturation)和透明度(Value)用百分比表示,取值范围是0~100%。饱和度越高,说明颜色越深,越接近光谱色。饱和度越低,说明颜色越浅,越接近白色。饱和度为0表示纯白色。值越大,颜色越饱和。

透明度越高,表示颜色越明亮,透明度越低,表示颜色越暗,透明度为0表示纯黑色。

我们也可以利用一些图像处理工具来观察RGB色彩空间与HSV色彩空间的对应关系,如PS就是非常好的图像处理工具,打开PS,选择前景色或背景色,会显示一个颜色选择窗口,如图5所示。将RGB色彩空间中的R、G、B分别调整为255、255、0,即黄色。RGB的黄色对应了HSV色彩空间中H=60的颜色,如果正好是光谱颜色,那么S = V = 100%。

可能很多读者还无法理解到底什么是饱和度和透明度,下面就更直观解释一下饱和度和透明度。在Hue色彩空间中,饱和度减小,就相当于往光谱色中添加白色,光谱色所占的比例也在减小,饱和度减为0,表示光谱色所占的比例为零,导致整个颜色呈现白色。

透明度减小,就相当于往光谱色中添加黑色,光谱色所占的比例也在减小,透明度减为0,表示光谱色所占的比例为零,导致整个颜色呈现黑色。

HSV 色彩空间对用户来说是一种比较直观的颜色模型。我们可以很轻松地得到单一颜色值,即指定颜色角H,并让V=S=1,然后通过向其中加入黑色和白色来得到我们需要的颜色。增加黑色可以减小V而S不变,同样增加白色可以减小S而V不变。例如,要得到深蓝色,V=0.4 S=1 H=240。要得到浅蓝色,V=1 S=0.4 H=240度。

5. RGB/BGR色彩空间与HSV色彩空间之间相互转换

OpenCV提供的cvtColor函数不仅可以将图像从RGB/BGR色彩空间转换到GRAY色彩空间,还能将图像在RGB/BGR色彩空间与HSV色彩空间之间相互转换。表2是将图像在RGB/BGR色彩空间与HSV色彩空间之间转换时需要使用的色彩空间转换吗。

下面的代码将BGR色彩空间的图像(flower.jpg)与HSV色彩空间互相转换,并保存转换结果。

import cv2
image = cv2.imread("images/flower.jpg")
cv2.imshow("flower", image)
# 从BGR色彩空间转换到HSV色彩空间
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
cv2.imshow("hsv", hsv_image)
cv2.imwrite("images/flower_hsv.jpg",hsv_image)


现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。



分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

![](https://img-blog.csdnimg.cn/img_convert/21b2604bd33c4b6713f686ddd3fe5aff.png)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)**
![img](https://img-blog.csdnimg.cn/img_convert/3d12b78f66e012f3e2005e6633aebbda.png)

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
友,可以添加V获取:vip1024c (备注python)**
[外链图片转存中...(img-XfgHA5k5-1713438880399)]

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 27
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值