OpenCV-Python入门教程4-颜色空间转换
一、颜色空间转换
import cv2
import numpy as np
img = cv2.imread('lena.jpg')
# 转换成灰度图
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('img', img)
cv2.imshow('gray', img_gray)
cv2.waitKey(0)
颜色转换其实是数学运算,如灰度化最常用的是:gray = R* 0.299 + G* 0.587 + B * 0.114
二、视频中特定颜色物体追踪
HSV:色调(H),饱和度(S),明度(V)。对光照的变换并不是很敏感,相比于BGR更易于区分颜色,常用于颜色识别的模型。转换模式用COLOR_BGR2HSV表示
OpenCV中色调H的范围为[0, 179],饱和度S是[0, 255],明度V是[0, 255]。虽然H的理论数值是0°~360°,但8位图像像素点的最大值是255,所以OpenCV除以了2.
现在,我们实现一个使用HSV来只显示视频中蓝色物体的例子,步骤如下:
1. 捕获视频中一帧
2. 从BGR转换到HSV
3. 提取蓝色范围的物体
4. 只显示蓝色物体
# 蓝色的hsv值
blue = np.uint8([[[255, 0, 0]]])
hsv_blue = cv2.cvtColor(blue, cv2.COLOR_BGR2HSV)
print(hsv_blue)
[[[120 255 255]]]
# 绿色的hsv值
green = np.uint8([[[0, 255, 0]]])
hsv_green = cv2.cvtColor(green, cv2.COLOR_BGR2HSV)
print(hsv_green)
[[[ 60 255 255]]]
# 红色的hsv值
red = np.uint8([[[0, 0, 255]]])
hsv_red = cv2.cvtColor(red, cv2.COLOR_BGR2HSV)
print(hsv_red)
[[[ 0 255 255]]]
import numpy as np capture = cv2.VideoCapture(0) # 蓝色的范围,不同光照条件下不一样,可灵活调整
lower_blue = np.array([100, 110, 110])
upper_blue = np.array([130, 255, 255]) while(True):
# 1. 捕获视频中的一帧
ret, frame = capture.read() # 2.从BGR转换到HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # 3. inRange(): 介于lower/upper之间的白色,其余黑色
mask = cv2.inRange(hsv, lower_blue, upper_blue) # 4. 只保留原图中的蓝色部分
res = cv2.bitwise_and(frame, frame, mask=mask) cv2.imshow('frame', frame)
cv2.imshow('mask', mask)
cv2.imshow('res', res) if cv2.waitKey(1) == ord('q'):
break
当然,你也可以只显示视频中红色或者绿色的物体。只要修改一下HSV值的上下限即可。
三、在视频中同时提取红、绿、蓝色的物体
capture = cv2.VideoCapture(0) # 蓝色的范围,不同光照条件下不一样,可灵活调整
lower_blue = np.array([100, 110, 110])
upper_blue = np.array([130, 255, 255]) # 绿色的范围
lower_green = np.array([40, 110, 110])
upper_green = np.array([70, 255, 255]) # 红色的范围
lower_red = np.array([160, 110, 110])
upper_red = np.array([179, 255, 255]) while(True):
# 1. 捕获视频中的一帧
ret, frame = capture.read() # 2.从BGR转换到HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # 3. inRange(): 介于lower/upper之间的白色,其余黑色
mask_blue = cv2.inRange(hsv, lower_blue, upper_blue)
mask_green = cv2.inRange(hsv, lower_green, upper_green)
mask_red = cv2.inRange(hsv, lower_red, upper_red) mask = mask_blue + mask_green + mask_red # 4. 只保留原图中的蓝色部分
res = cv2.bitwise_and(frame, frame, mask=mask) cv2.imshow('frame', frame)
cv2.imshow('mask', mask)
cv2.imshow('res', res) if cv2.waitKey(1) == ord('q'):
break
四、小结
cv2.cvtColor()函数用来进行颜色空间转换,常用BGR↔RGB,BGR↔Gray,BGR↔HSV
- HSV颜色模型常用于颜色识别,要想知道某种颜色在HSV下的值,可以将它的BGR值用cvtColor()转换得到
参考网址:https://tianchi.aliyun.com/course/courseConsole?courseId=40992&chapterIndex=1§ionIndex=5
OpenCV-Python入门教程4-颜色空间转换的更多相关文章
- 毫无基础的人入门Python,Python入门教程
随着人工智能的发展,Python近两年也是大火,越来越多的人加入到Python学习大军,对于毫无基础的人该如何入门Python呢?这里整理了一些个人经验和Python入门教程供大家参考. 如果你是零基 ...
- 老鸟的Python入门教程
转自老鸟的Python入门教程 重要说明 这不是给编程新手准备的教程,如果您入行编程不久,或者还没有使用过1到2门编程语言,请移步!这是有一定编程经验的人准备的.最好是熟知Java或C,懂得命令行,S ...
- 2018-06-21 中文代码示例视频演示Python入门教程第五章 数据结构
知乎原链 续前作: 中文代码示例视频演示Python入门教程第四章 控制流 对应在线文档: 5. Data Structures 这一章起初还是采取了尽量与原例程相近的汉化方式, 但有些语义较偏(如T ...
- 2018-06-20 中文代码示例视频演示Python入门教程第四章 控制流
知乎原链 续前作: 中文代码示例视频演示Python入门教程第三章 简介Python 对应在线文档: 4. More Control Flow Tools 录制中出了不少岔子. 另外, 输入法确实是一 ...
- 2018-06-20 中文代码示例视频演示Python入门教程第三章 简介Python
知乎原链 Python 3.6.5官方入门教程中示例代码汉化后演示 对应在线文档: 3. An Informal Introduction to Python 不知如何合集, 请指教. 中文代码示例P ...
- Python入门教程 超详细1小时学会Python
Python入门教程 超详细1小时学会Python 作者: 字体:[增加 减小] 类型:转载 时间:2006-09-08我要评论 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Ja ...
- 极度舒适的 Python 入门教程,小猪佩奇也能学会~
编程几乎已经成为现代人的一门必修课,特别是 Python ,不仅长期霸占编程趋势榜.薪资榜第一,还屡屡进入小学教材,甚至成为浙江省信息技术高考项目-- 今天,小编带来了一门极度舒适的 Python 入 ...
- Python入门教程 超详细1小时学会Python
Python入门教程 超详细1小时学会Python 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Java和Javascript,不用1小时你就可以用Python快速流畅地写有用的 ...
- Python入门教程完整版(懂中文就能学会)
前几天给大家分享<从零学会Photoshop经典教程300集>的教程受到了广泛的关注,有人不知道怎么领取,居然称小编为"骗子". 不过小编的内心是强大的,网友虐我千百遍 ...
- Python入门教程(1)
人生苦短,我用Python! Python(英语发音:/ˈpaɪθən/), 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于19 ...
随机推荐
- android 组建添加透明度
给TextView添加透明度,起初用的方法是android:alpha = "0.3" 添加后,文字显示也有点透明发虚,后来改成设置background,然后 backgroun ...
- Three.js基础探寻四——立方体、平面与球体
前面简单介绍了webGL和Three.js的背景以及照相机的设定,接下来介绍一些Three.js中的几何形状. 1.立方体 虽然这一形状的名字叫立方体(CubeGeometry),但它其实是长方体,也 ...
- 【转】PyQt5开发环境配置并使用
[转]PyQt5开发环境配置并使用 https://blog.csdn.net/HuangZhang_123/article/details/78046706 本人新书<玩转Python网络爬虫 ...
- Gitlab 备份迁移恢复报错gtar: .: Cannot mkdir: No such file or directory
1. 版本信息 OS: centos 6.9 Gitlab: gitlab-ce.10.7.4 gitlab-ce.10.8.0 gitlab-ce.10.8.3 gitlab-ce.10.8.4 2 ...
- Linux DTS(Device Tree Source)设备树详解之二(dts匹配及发挥作用的流程篇)【转】
转自:https://blog.csdn.net/radianceblau/article/details/74722395 版权声明:本文为博主原创文章,未经博主允许不得转载.如本文对您有帮助,欢迎 ...
- Liunx之KVM搭建图形化的WEB
作者:邓聪聪 我们常在Windowns下使用VMware,当然在Liunx中也有这样的软件供我们使用.生产环境的KVM宿主机越来越多,需要对宿主机的状态进行调控.这里用webvirtmgr进行管理.图 ...
- python3+selenium入门01-环境搭建
作为一个测试,在最近两年应该有明显的感觉.那就是工作变的难找,要求变的高了,自动化测试,性能测试等.没有自动化测试能力,只会点点点工作难找不说,工资也不高.所以还是要学习一些技术.首先要学习一门编程语 ...
- 题解-TIOJ1905 最理想的身高差
Problem 题目原型 题目大意:求区间最小差值 序列长度\(1e5\),询问\(2e5\) Solution 总体思路就是找出所有可能作为答案的点对,用资料结构_(:зゝ∠)_维护,然后询问 至于 ...
- Struts2框架下的文件上传文件类型、名称约定
Struts2框架下的文件上传机制:1.通过multipart/form-data form提交文件到服务器2.文件名是通过什么地方设置的?在strust2的FileUploadInterceptor ...
- MySQL--pymysql模块
import pymysqlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa连接conn=pymysql.connect(host='127.0.0. ...