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 ...
随机推荐
- DDD实战进阶第一波(四):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架三)
上一篇文章我们讲了经典DDD架构对比传统三层架构的优势,以及经典DDD架构每一层的职责后,本篇文章将介绍基础结构层中支持DDD的轻量级框架的主要代码. 这里需要说明的是,DDD轻量级框架能够体现DDD ...
- 使用 Portainer UI 管理 Docker 主机
Docker 使用命令行的方式来管理有时候并没有那么直观,可以使用 Portainer 的 UI 来管理 Docker 主机和 Docker Swarm 集群. 安装 Portainer 环境:cen ...
- css实现纯文字内容元素透明背景(兼容IE6)
HTML: <div class="title-wrapper"> <span class="title"> <span clas ...
- Android并发编程 多线程与锁
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,如果能给各位看官带来一丝启发或者帮助,那真是极好的. 前言 前一篇Android并发编程开篇呢,主要是简单介绍一下线程以及 ...
- Linux下rsync daemon模式下的错误汇总
一.前言:最近学习服务环境搭建,遇到了许多大大小小的问题,不过还好,经过我的一通努力终于都解决了,所以分享出来给自己留个纪念,同时也希望能帮助学习中的朋友. 二.环境:两台服务器环境相同 1 [roo ...
- Docker基本命令汇总
Docker的三大核心概念:镜像.容器.仓库 镜像:类似虚拟机的镜像.用俗话说就是安装文件. 容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例,可以将其启动.开始.停止.删除.而这些容器都是相 ...
- 基于vue框架手写一个notify插件,实现通知功能
简单编写一个vue插件,当点击时触发notify插件,dom中出现相应内容并且在相应时间之后清除,我们可以在根组件中设定通知内容和延迟消失时间. 1. 基础知识 我们首先初始化一个vue项目,删除不需 ...
- c++语言的输入输出流库
1.c++语言标准输入输出流 <1>控制符的用法 #include <iostream> #include <iomanip> using namespace st ...
- Django学习(5)优雅地分页展示网页
在我们平时浏览网页时,经常会遇到网页里条目很多的情形,这时就会用到分页展示的功能.那么,在Django中,是如何实现网页分类的功能的呢?答案是Paginator类. 本次分享讲具体展示如何利用Djan ...
- C# ACtiveMQ 收发数据
1.下载ActiveMQ 官方网站下载地址:http://activemq.apache.org/ 2.运行ActiveMQ 解压缩apache-activemq-5.10.0-bin.zip,然后双 ...