OpenCV 的颜色空间转换
# coding: utf-8 '''
第13章主要介绍:颜色空间转换
''' import cv2
import numpy as np '''
经常用到的颜色空间转换是: BGR<->Gray 和 BGR<->HSV
cv2.cvtColor(input_image , flag),flag是转换类型:cv2.COLOR_BGR2GRAY,cv2.COLOR_BGR2HSV
HSV(Hue , Saturation , Value):色调,饱和度,明度
色度H:用角度度量,取值范围为0~360,红色开始按逆时针方向计算,红色为0度,绿色为120度,蓝色为240度
饱和度S:接近光谱色的程度,颜色可以看成是光谱色与白色混合结果,光谱色占的比例愈大,颜色接近光谱色的程度
越高,颜色饱和度就越高。光谱色中白色成分为0,饱和度达到最高,取值范围0%~100%,值越大,颜色越饱和
明度V:表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,与物体的透射比有关,取值
范围为0%(黑)~100%(白)
RGB面向硬件,HSV面向用户
在Opencv中
H色度取值范围是[0,179]
S饱和度的取值范围是[0,255]
V明度的取值范围是[0,255]
拿opencv的HSV值与其他软件的HSV值进行对比时,要归一化
''' #获取颜色转换中所有可以使用的flag
def getColorConvertFlag():
# dir() 查找module下的所有类
flags = [i for i in dir(cv2) if i.startswith("COLOR_") ]
print(flags) '''
物体跟踪,可以将图像从BGR转换到HSV后,提取某个特定颜色的物体
提取蓝色物体步骤:
1从视频中获取每一帧图像
2将图像转换到HSV空间
3设置HSV阈值到蓝色范围
4获取蓝色物体
'''
def trackObject():
cap = cv2.VideoCapture(0)
while(1):
ret , frame = cap.read() #转换为hsv
hsv = cv2.cvtColor(frame , cv2.COLOR_BGR2HSV)
#注意这里的上下限都是一个含有HSV的三元组
lower_blue = np.array([110 , 50 , 50])
upper_blue = np.array([130 , 255 , 255])
'''
cv2.inRange(src , lowerb , upperb[,dst])
作用:更改函数对某个单通道中的元素检查其值是否在范围中
src:输入数组,lowerb:包含低边界的数组,upperb:包含高边界的数组,dst:输出数组
如果src(I)符合范围,则dst(I)被设置为255,也就是说dst返回的是非黑即白的图像,而且符合要求
的部分是白色的
'''
#构建物体掩膜(黑白部分),注意这里要使用hsv
mask = cv2.inRange(hsv , lower_blue , upper_blue)
#对原图像和掩膜进行位运算
res = cv2.bitwise_and(frame ,frame , mask = mask)
cv2.imshow("frame" , frame)
cv2.imshow("mask" , mask)
cv2.imshow("res" , res)
k = cv2.waitKey(5) & 0xFF
#ASCII中27是esc
if k == 27:
break
cv2.destroyAllWindows() '''
如何找到要跟踪对象的HSV值,使用cv2.cvtColor,传入的参数是(你想要的)BGR值而不是一幅图。
例如找到绿色的HSV值,在终端输入以下命令
'''
def getHSV():
'''
三层括号对应于:cvArray,cvMatIplImage
也就是第一个括号是数组,第二个是矩阵,第三个是图像
'''
green = np.uint8( [ [ [0 , 255 , 0] ] ])
hsv_green = cv2.cvtColor(green , cv2.COLOR_BGR2HSV)
print(hsv_green)
'''
可以分别用[H-100 , 100 , 100]和[H+100 , 255 , 255]做上下阈值,也可以用图像编辑软件(GIMP)
''' if __name__ == "__main__":
#getColorConvertFlag()
#trackObject()
getHSV()
OpenCV 的颜色空间转换的更多相关文章
- OpenCV 颜色空间转换参数CV_BGR2GRAY改变
OpenCV的颜色空间转换函数: C++: void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 ) 参数d ...
- 颜色空间转换 cvtColor()[OpenCV 笔记13]
void cvtColor(InputArray src, OutputArray dst, ) src: 输入图像 dst: 输出图像 code: 颜色空间转换标识符 OpenCV2的CV_前缀宏命 ...
- opencv学习笔记——颜色空间转换函数cv::cvtColor详解
cv::cvtColor()用于将图像从一个颜色空间转换到另一个颜色空间的转换(目前常见的颜色空间均支持),并且在转换的过程中能够保证数据的类型不变,即转换后的图像的数据类型和位深与源图像一致. 具体 ...
- OpenCV 学习笔记(10)HSV颜色空间及颜色空间转换(RGB-HSV)
1.1 颜色空间介绍 RGB 颜色空间是大家最熟悉的颜色空间,即三基色空间,任何一种颜色都可以由该三种 颜色混合而成.然而一般对颜色空间的图像进行有效处理都是在 HSV 空间进行的,HSV(色 调 H ...
- OpenCV学习笔记(5)——颜色空间转换
学习如歌对图像进行颜色空间转换,从BGR到灰度图,或者从BGR到HSV等 创建一个程序用来从一幅图像中获取某个特定颜色的物体 1.转换颜色空间 OpenCV中有超过150种进行颜色空间转化的方法,但是 ...
- 【OpenCV-Python】-颜色空间转换
OpenCV官方教程中文版 for Python,原文为段立辉翻译,感谢Linux公社www.linuxidc.com此文档为自学转述,如有侵权请联系本人 使用工具Python3.6使用包cv2,nu ...
- Python-OpenCV中图像颜色空间转换
目录 cv2.cvtColor() 1. RGB to GRAY 2. RGB to CIE XYZ 3. RGB to YCrCb JPEG 4. RGB to HSV 5. RGB to HLS ...
- (Ooencv3)颜色空间转换
(Ooencv3)颜色空间转换 opencv中有多种色彩空间,包括 RGB.HSI.HSL.HSV.HSB.YCrCb.CIE XYZ.CIE Lab8种,使用中经常要遇到色彩空间的转化,以便生成ma ...
- python数字图像处理(4):图像数据类型及颜色空间转换
一.图像数据类型及转换 在skimage中,一张图片就是一个简单的numpy数组,数组的数据类型有很多种,相互之间也可以转换.这些数据类型及取值范围如下表所示: Data type Range uin ...
随机推荐
- UNPIVOT
UNPIVOT UNPIVOT则相反,把数据从列旋转到行 SELECT * INTO product_vlues FROM ( SELECT NAME , ...
- CentOS 6.5静态IP的设置(NAT和桥接联网方式都适用)
不多说,直接上干货! 为了方便,用Xshell来.并将IP设置为静态的.因为,在CentOS里,若不对其IP进行静态设置的话,则每次开机,其IP都是动态变化的,这样会给后续工作带来麻烦.为此,我们需将 ...
- k8s升级,HA集群1.12.0~HA集群1.13.2
k8s升级,此次升级是1.12.0 至1.13.2 准备 # 首先升级master节点的基础组件kubeadm.kubelet.kubectl apt policy kubeadm 找到相应的版本,如 ...
- HTML DOM querySelector() 方法
Document 对象 实例 获取文档中 id="demo" 的元素: document.querySelector("#demo"); <!DOCTY ...
- Sql Insert into select 创建临时表插入自增列
] GO ============================================= -- Author: PPL -- Create date: 2015-11-23 -- Desc ...
- [android] 手机卫士绑定sim卡
更新: 收不到启动广播,查看知乎,好像是说高版本的系统都禁止了 还可以通过adb发送开机广播 adb shell am broadcast -a android.intent.action.BOOT_ ...
- 本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动
重新安装MySQL数据库,由于安装的时候马虎,一路next(事实上,某些地方需要严格的配置,我忘记注意了),导致现在出了很多麻烦. 错误信息: 本地计算机上的MySQL服务启动后停止.某些服务在未由其 ...
- 【RabbitMQ】3、win7下安装RabbitMQ
RabbitMQ依赖erlang,所以先安装erlang,然后再安装RabbitMQ; erlang,下载地址:http://www.erlang.org/download RabbitMQ,下载地址 ...
- hash table (youtube 2)
https://www.youtube.com/watch?v=jEdaduyLLqY
- Matlab disp()
matlab中disp()就是屏幕输出函数,类似于c语言中的printf()函数