OpenCV 的颜色空间转换

OpenCV 的颜色空间转换

 1 # coding: utf-8
 2  
 3 '''
 4 第13章主要介绍:颜色空间转换
 5 '''
 6  
 7 import cv2
 8 import numpy as np
 9  
10 '''
11 经常用到的颜色空间转换是: BGR<->Gray 和 BGR<->HSV
12 cv2.cvtColor(input_image , flag),flag是转换类型:cv2.COLOR_BGR2GRAY,cv2.COLOR_BGR2HSV
13 HSV(Hue , Saturation , Value):色调,饱和度,明度
14 色度H:用角度度量,取值范围为0~360,红色开始按逆时针方向计算,红色为0度,绿色为120度,蓝色为240度
15 饱和度S:接近光谱色的程度,颜色可以看成是光谱色与白色混合结果,光谱色占的比例愈大,颜色接近光谱色的程度
16         越高,颜色饱和度就越高。光谱色中白色成分为0,饱和度达到最高,取值范围0%~100%,值越大,颜色越饱和
17 明度V:表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,与物体的透射比有关,取值
18       范围为0%(黑)~100%(白)
19 RGB面向硬件,HSV面向用户
20 在Opencv中
21 H色度取值范围是[0,179]
22 S饱和度的取值范围是[0,255]
23 V明度的取值范围是[0,255]
24 拿opencv的HSV值与其他软件的HSV值进行对比时,要归一化
25 '''
26  
27 #获取颜色转换中所有可以使用的flag
28 def getColorConvertFlag():
29     # dir() 查找module下的所有类
30     flags = [i for i in dir(cv2) if i.startswith("COLOR_") ]
31     print(flags)
32  
33 '''
34 物体跟踪,可以将图像从BGR转换到HSV后,提取某个特定颜色的物体
35 提取蓝色物体步骤:
36 1从视频中获取每一帧图像
37 2将图像转换到HSV空间
38 3设置HSV阈值到蓝色范围
39 4获取蓝色物体
40 '''
41 def trackObject():
42     cap = cv2.VideoCapture(0)
43     while(1):
44         ret , frame = cap.read()
45  
46         #转换为hsv
47         hsv = cv2.cvtColor(frame , cv2.COLOR_BGR2HSV)
48         #注意这里的上下限都是一个含有HSV的三元组
49         lower_blue = np.array([110 , 50 , 50])
50         upper_blue = np.array([130 , 255 , 255])
51         '''
52         cv2.inRange(src , lowerb , upperb[,dst])
53         作用:更改函数对某个单通道中的元素检查其值是否在范围中
54         src:输入数组,lowerb:包含低边界的数组,upperb:包含高边界的数组,dst:输出数组
55         如果src(I)符合范围,则dst(I)被设置为255,也就是说dst返回的是非黑即白的图像,而且符合要求
56          的部分是白色的
57         '''
58         #构建物体掩膜(黑白部分),注意这里要使用hsv
59         mask = cv2.inRange(hsv , lower_blue , upper_blue)
60         #对原图像和掩膜进行位运算
61         res = cv2.bitwise_and(frame ,frame , mask = mask)
62         cv2.imshow("frame" , frame)
63         cv2.imshow("mask" , mask)
64         cv2.imshow("res" , res)
65         k = cv2.waitKey(5) & 0xFF
66         #ASCII中27是esc
67         if k == 27:
68             break
69     cv2.destroyAllWindows()
70  
71  
72 '''
73 如何找到要跟踪对象的HSV值,使用cv2.cvtColor,传入的参数是(你想要的)BGR值而不是一幅图。
74 例如找到绿色的HSV值,在终端输入以下命令
75 '''
76 def getHSV():
77     '''
78     三层括号对应于:cvArray,cvMatIplImage
79     也就是第一个括号是数组,第二个是矩阵,第三个是图像
80     '''
81     green = np.uint8( [ [ [0 , 255 , 0] ] ])
82     hsv_green = cv2.cvtColor(green , cv2.COLOR_BGR2HSV)
83     print(hsv_green)
84     '''
85     可以分别用[H-100 , 100 , 100]和[H+100 , 255 , 255]做上下阈值,也可以用图像编辑软件(GIMP)
86     '''
87  
88  
89  
90  
91  
92  
93  
94  
95 if __name__ == "__main__":
96     #getColorConvertFlag()
97     #trackObject()
98     getHSV()
99  

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119589.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • n皇后问题总结_模拟退火n皇后

    n皇后问题总结_模拟退火n皇后N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行、同一列、同一斜线上的皇后都会自动攻击)。一、 求解N皇后问题是算法中回溯法应用的一个经典案例      回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。     在现实中,有很多问题往往需要我们把其所有

  • Eclipse中使用SVN[通俗易懂]

    Eclipse中使用SVN[通俗易懂]概述在我们的日常工作中,经常会用到SVN,大多数都是搭配Eclipse/MyEclipse使用。本文主要介绍SVN在Eclipse中的一些最长用的功能,包括SVN插件的下载使用、上传代码到服务器、从服务器下载代码、从服务器更新代码、解决代码冲突。本文链接:http://blog.csdn.net/v123411739/article/details/225121331.在Eclipse里下载Sub…

  • 2021pycharm激活码(JetBrains全家桶)「建议收藏」

    (2021pycharm激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~M…

  • 加密原理详解:对称式加密 VS 非对称式加密[通俗易懂]

    加密原理详解:对称式加密 VS 非对称式加密[通俗易懂]一、前言在了解加密原理前,我们来看看这样一个故事。小红和小明是情侣,一天,小红给小明发短信说:“亲爱的,我银行卡上没有钱了,你给我转1万块吧。”有过上当受骗经历的人都知道这有可能是小偷偷了小红手提包,然后拿手机发的短信。不过我们小明学过加密原理,于是他回复说:“你直接拿我的银行卡刷吧,密码加上我们第一次约会的日期就是663156。”很明显,只有小明和小红知道他们第一次约会是什么时候,假设是2008年4月1号,那么小红就可以根据计算663156-200841=462315得到银行卡密码,就可以消费了。这

  • dhcp的option82_dhcp option

    dhcp的option82_dhcp optionISCDHCPandoption82TheRelayAgentInformationOptionakaOption82OnDSLaccessnetworksthatuseDHCPtoassignanIPaddresstotheenduser,itisusualthatsomenetworkeleme…

    2022年10月10日
  • java开发简历项目经验_java工程师简历案例

    java开发简历项目经验_java工程师简历案例 最近我在帮朋友的公司招人,招人的第一步是要筛选简历,在这过程中,我发现虽然能收到很多简历,但实际能通过筛选能进入到技术面试流程的简历不多,估计10份里不会超过4份能通过筛选。  如果没法通过技术面试,那么候选人尚且能收集面试题,回家继续准备,毕竟他和面试官也交流过,也不算没收获,但对于这些没法通过筛选的简历,简历的主人往往是无从得知的(公司不会主动通知),所以他们依然会混混沌沌,可以预想,在…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号