前言

opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍颜色空间转换,坚持学习,共同进步。

系列教程参照OpenCV-Python中文教程

系统环境

系统:win7_x64;

python版本:python3.5.2;

opencv版本:opencv3.3.1;

内容安排

1.知识点介绍;

2.测试代码;

具体内容

1.知识点介绍;

使用的库有cv2/numpy,涉及函数有cv2.cvtColor(),cv2.inRange();

1.1 转换颜色空间;

1)opencv有很多种颜色空间转换方法,常用的一般是BGR转灰度/HSV;

函数表示为cv2.cvtColor(input_image, flag),其中flag就是转换类型,比如cv2.COLOR_BGR2GRAY、cv2.COLOR_BGR2HSV等。

2)在OpenCV的HSV格式中,H(色彩/色度)的取值范围是 [0,179],S(饱和度)的取值范围 [0,255],V(亮度)的取值范围 [0,255]。

但是不同的软件使用的值可能不同,所以当拿OpenCV的HSV值与其他软件的HSV值对比时,一定要记得归一化。

hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)

3)如何查看flag表示的格式转换类型;

#查看所有格式转换
import cv2
flags = [i for i in dir(cv2) if i.startswith("COLOR_") ]
print (len(flags))#list的长度;
print (flags)

1.2 物体跟踪;

可以利用格式转换提取物体的颜色信息,HSV要比BGR更好地表示某种特定颜色;

提取某种颜色的步骤:step1,从视频中获取图像帧;step2,将图像转换到HSV空间;

step3,设置HSV中某种颜色的范围;step4,获取图像中的某种颜色,从而进行其他处理;

#设定蓝色的阀值
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
#根据阀值构建掩模
mask = cv2.inRange(hsv,lower_blue,upper_blue)
#对原图和掩模进行位运算
res = cv2.bitwise_and(frame,frame,mask=mask)

1.3 如何找到物体的HSV值;

2.测试代码;

2.1 物体跟踪;

import cv2
import numpy as np cap = cv2.VideoCapture(0) while(1):
#获取每一帧
ret,frame = cap.read()
#转换到HSV
hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
#设定蓝色的阀值
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
#根据阀值构建掩模
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
if k == 27:
break
#关闭窗口
cv2.destroyAllWindows()

2.2 如何找到物体的HSV值;

#查看所有格式转换
import cv2
flags = [i for i in dir(cv2) if i.startswith("COLOR_") ]
print (len(flags))#list的长度;
#print (flags) #
import numpy as np
#green=np.uint8([0,255,0])
#hsv_green=cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
#out:
#error: /builddir/build/BUILD/opencv-2.4.6.1/ modules/imgproc/src/color.cpp:3541:
#error: (-215) (scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F) in function cvtColor #scn (the number of channels of the source),
#i.e. self.img.channels(), is neither 3 nor 4.
# #depth (of the source),
#i.e. self.img.depth(), is neither CV_8U nor CV_32F.
# 所以不能用 [0,255,0] 而用 [[[0,255,0]]]
# 的三层括号应分别对应于 cvArray cvMat IplImage
#以上内容没明白???
green=np.uint8([[[0,255,0]]])
hsv_green=cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
print (hsv_green )
#out: [[[60 255 255]]]

参考

1.颜色空间转换

2.list长度

opencv-python教程学习系列10-颜色空间转换的更多相关文章

  1. 《Python爬虫学习系列教程》学习笔记

    http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己 ...

  2. [转]《Python爬虫学习系列教程》

    <Python爬虫学习系列教程>学习笔记 http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多. ...

  3. opencv-python教程学习系列12-图像阈值

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像阈值/二值化,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 ...

  4. opencv-python教程学习系列11-几何变换

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍几何变换,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 系统: ...

  5. opencv-python教程学习系列8-opencv图像算术运算

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像的算术运算,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 ...

  6. opencv-python教程学习系列7-opencv图像基本操作

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像的基本操作,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 ...

  7. opencv-python教程学习系列5-处理鼠标事件

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍opencv-python处理鼠标事件,坚持学习,共同进步. 系列教程参照OpenCV-Pytho ...

  8. opencv-python教程学习系列4-opencv绘图函数

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍opencv绘图函数,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统 ...

  9. opencv-python教程学习系列13-图像平滑

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像平滑,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 系统: ...

随机推荐

  1. Beta 冲刺 第三天

    第三天 2018.6.26 今日完成任务情况. 妥志福.牛瑞鑫: 完成任务:让用户接触系统,指出系统中存在的问题,并统计修改的问题,提出修改的方案. 王胜海.马中林: 完成任务:对文档中存在的问题修改 ...

  2. iOS Socket编程-C语言版(UDP)

    . UDP Socket编程 先讲一讲UDP编程,因为比TCP要简单多了.首先,我们需要明白UDP是用户数据报协议,英文名为User Datagram Protocol,它是面向无连接的. 注意:So ...

  3. python3.6 ImportWarning: can't resolve package from __spec__ or __package__, falling back on __name__ and __path__

    Cython emulates Python 2-style implicit relative imports on Python 3 Cython的锅(也就是绝大多数下载安装的python)新的i ...

  4. 【Golang】解决Go test执行单个测试文件提示未定义问题

    背景 很多人记录过怎么执行Go test单个文件或者单个函数,但是要么对执行单文件用例存在函数或变量引用的场景避而不谈,要么提示调用了其它文件中的模块会报错.其实了解了go test命令的机制之后,这 ...

  5. 20170711筛选OutLook主题并转发

    Sub 筛选OutLook主题并转发() On Error Resume Next Dim OutApp As Application Set OutApp = Application Dim Out ...

  6. MySQL Replication 线程(理解详细过程)

    Replication 线程 Mysql 的Replication 是一个异步的复制过程,从一个Mysql instace(我们称之为Master)复制到另一个Mysql instance(我们称之S ...

  7. ubuntu 用户和root权限转换

    1,用户权限要转换为root 输入:sudo su   或者sudo -i  然后按照提示输入相应的密码你就可以转化为root用户了. 2,root权限切换成用户权限 输入:su  如果是服务器那就输 ...

  8. hdu-1892-二维BIT

    See you~ Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Su ...

  9. OC 文件基本操作

    // // main.m // oc_13 // // Created by ma c on 15/12/17. // Copyright (c) 2015年 博文科技. All rights res ...

  10. Java中String和byte[]间的 转换浅析

    Java语言中字符串类型和字节数组类型相互之间的转换经常发生,网上的分析及代码也比较多,本文将分析总结常规的byte[]和String间的转换以及十六进制String和byte[]间相互转换的原理及实 ...