Python+OpenCV图像处理—— 色彩空间转换


Posted in Python onOctober 22, 2020

一、色彩空间的转换

代码如下:

#色彩空间转换
import cv2 as cv
def color_space_demo(img):
  gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) #RGB转换为GRAY 这里的GRAY是单通道的
  cv.imshow("gray", gray)
  hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)   #RGB转换为HSV
  cv.imshow("hsv", hsv)
  yuv = cv.cvtColor(img, cv.COLOR_RGB2YUV)   #RGB转换为YUV
  cv.imshow("yuv",yuv)
  Ycrcb = cv.cvtColor(img, cv.COLOR_RGB2YCrCb) #RGB转换为YCrCb
  cv.imshow("Ycrcb", Ycrcb)
src = cv.imread('D:\imageload\example.png')
cv.namedWindow('first_image', cv.WINDOW_AUTOSIZE)
cv.imshow('first_image', src)
color_space_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果:

Python+OpenCV图像处理—— 色彩空间转换

1.RGB就是指Red,Green和Blue,一副图像由这三个channel(通道)构成

2.Gray就是只有灰度值一个channel。

3.HSV即Hue(色调),Saturation(饱和度)和Value(亮度)三个channel

切记(纯属个人理解):

1.百度百科说,将原来的RGB(R,G,B)中的R,G,B统一按照一种转换关系用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图。

Python+OpenCV图像处理—— 色彩空间转换

2.opencv里,COLOR_RGB2GRAY是将三通道RGB对象转换为单通道的灰度对象。

3.将单通道灰度对象转换为 RGB 时,生成的RGB对象的每个通道的值是灰度对象的灰度值。

RGB是为了让机器更好的显示图像,对于人类来说并不直观,HSV更为贴近我们的认知,所以通常我们在针对某种颜色做提取时会转换到HSV颜色空间里面来处理. 

补注:

1.HSV如下图:

Python+OpenCV图像处理—— 色彩空间转换

2.opencv里HSV色彩空间范围为: H:0-180  S: 0-255   V: 0-255

3.常见的色彩空间有RGB、HSV、HIS、YCrCb、YUV,其中最常用的是RGB、HSV、YUV,其中YUV就是YCrCb(详见百度百科)。其中YUV的“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

二、利用inrange函数过滤视频中的颜色,实现对特定颜色的追踪

代码如下:

#视频特定颜色追踪
import cv2 as cv
import numpy as np
def extrace_object_demo():
  capture=cv.VideoCapture("E:/imageload/video_example.mp4")
  while True:
    ret, frame = capture.read()
    if ret == False:
      break
    hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)   #色彩空间由RGB转换为HSV
    lower_hsv = np.array([100, 43, 46])       #设置要过滤颜色的最小值
    upper_hsv = np.array([124, 255, 255])      #设置要过滤颜色的最大值
    mask = cv.inRange(hsv, lower_hsv, upper_hsv)  #调节图像颜色信息(H)、饱和度(S)、亮度(V)区间,选择蓝色区域
    cv.imshow("video",frame)
    cv.imshow("mask", mask)
    c = cv.waitKey(40)
    if c == 27:   #按键Esc的ASCII码为27
      break
extrace_object_demo()
cv.destroyAllWindows()

运行结果:

这里只放追踪蓝色部分的截图,仅供参考

Python+OpenCV图像处理—— 色彩空间转换

注意:

1.Opencv的inRange函数:可实现二值化功能

函数原型:inRange(src,lowerb, upperb[, dst]) -> dst         

函数的参数意义:第一个参数为原数组,可以为单通道,多通道。第二个参数为下界,第三个参数为上界

例如:mask = cv2.inRange(hsv, lower_blue, upper_blue)      

第一个参数:hsv指的是原图(原始图像矩阵)

第二个参数:lower_blue指的是图像中低于这个lower_blue的值,图像值变为255

第三个参数:upper_blue指的是图像中高于这个upper_blue的值,图像值变为255 (255即代表黑色)

而在lower_blue~upper_blue之间的值变成0 (0代表白色)

即:Opencv的inRange函数可提取特定颜色,使特定颜色变为白色,其他颜色变为黑色,这样就实现了二值化功能

2.HSV颜色对应的RGB分量范围表如下:(这里是三通道的)

Python+OpenCV图像处理—— 色彩空间转换

三、通道的分离、合并以及某个通道值的修改

代码如下:

#通道的分离与合并以及某个通道值的修改
import cv2 as cv
src=cv.imread('E:\imageload\example.png')
cv.namedWindow('first_image', cv.WINDOW_AUTOSIZE)
cv.imshow('first_image', src)

#三通道分离形成单通道图片
b, g, r =cv.split(src)
cv.imshow("second_blue", b)
cv.imshow("second_green", g)
cv.imshow("second_red", r)
# 其中cv.imshow("second_red", r)可表示为r = cv2.split(src)[2]

#三个单通道合成一个三通道图片
src = cv.merge([b, g, r])
cv.imshow('changed_image', src)

#修改多通道里的某个通道的值
src[:, :, 2] = 0
cv.imshow('modify_image', src)

cv.waitKey(0)
cv.destroyAllWindows()

注意:

1.这里用到了opencv的split函数和merge函数,实现通道的分离和合并。

2.cv.split函数分离出的b、g、r是单通道图像

以上就是Python+OpenCV图像处理—— 色彩空间转换的详细内容,更多关于Python+OpenCV图像处理的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中使用logging模块代替print(logging简明指南)
Jul 09 Python
python实现从字符串中找出字符1的位置以及个数的方法
Aug 25 Python
Python标准库urllib2的一些使用细节总结
Mar 16 Python
详解Python中open()函数指定文件打开方式的用法
Jun 04 Python
详解Python中 __get__和__getattr__和__getattribute__的区别
Jun 16 Python
Python实现中一次读取多个值的方法
Apr 22 Python
python 处理数字,把大于上限的数字置零实现方法
Jan 28 Python
python+os根据文件名自动生成文本
Mar 21 Python
在Python中过滤Windows文件名中的非法字符方法
Jun 10 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
Dec 26 Python
在主流系统之上安装Pygame的方法
May 20 Python
安装pytorch时报sslerror错误的解决方案
May 17 Python
Python类的继承super相关原理解析
Oct 22 #Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
Oct 22 #Python
Python基于内置函数type创建新类型
Oct 22 #Python
python使用ctypes库调用DLL动态链接库
Oct 22 #Python
Python通过len函数返回对象长度
Oct 22 #Python
python 还原梯度下降算法实现一维线性回归
Oct 22 #Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
Oct 22 #Python
You might like
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
2015/08/23 PHP
yii2实现根据时间搜索的方法
2016/05/25 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
使用命令对象代替switch语句的写法示例
2015/02/28 Javascript
JS通过ajax动态读取xml文件内容的方法
2015/03/24 Javascript
noty ? jQuery通知插件全面解析
2016/05/18 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
JS使用面向对象技术实现的tab选项卡效果示例
2017/02/28 Javascript
node.js中EJS 模板快速入门教程
2017/05/08 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
[00:17]游戏风云独家报道:DD赛后说出数字秘密 吓死你们啊!
2014/07/13 DOTA
[02:32]【DOTA2亚洲邀请赛】iceice,梦开始的地方
2017/03/13 DOTA
Python实现感知器模型、两层神经网络
2017/12/19 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
如何通过python画loss曲线的方法
2019/06/26 Python
QML使用Python的函数过程解析
2019/09/26 Python
基于python调用psutil模块过程解析
2019/12/20 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
美国最值得信赖的宠物药房:Allivet
2019/03/23 全球购物
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
幼儿园实习生辞职信
2014/01/20 职场文书
庆元旦文艺演出主持词
2014/03/27 职场文书
绿色环保演讲稿
2014/05/10 职场文书
小学秋季运动会报道稿
2014/09/30 职场文书
2016年秋季开学典礼新闻稿
2015/11/25 职场文书
《草虫的村落》教学反思
2016/02/20 职场文书
深入理解go slice结构
2021/09/15 Golang