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的Tornado框架中session支持的实现代码
Aug 21 Python
Flask Web开发入门之文件上传(八)
Aug 17 Python
Python3爬虫之urllib携带cookie爬取网页的方法
Dec 28 Python
使用Python轻松完成垃圾分类(基于图像识别)
Jul 09 Python
python实现邮件发送功能
Aug 10 Python
如何使用Python抓取网页tag操作
Feb 14 Python
Python semaphore evevt生产者消费者模型原理解析
Mar 18 Python
Python urllib2运行过程原理解析
Jun 04 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
基于nexus3配置Python仓库过程详解
Jun 15 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
Dec 18 Python
python 如何做一个识别率百分百的OCR
May 29 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使用glob函数遍历目录或文件夹的方法
2014/12/16 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
2018/04/21 PHP
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
2009/11/24 Javascript
javascript 验证日期的函数
2010/03/18 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
解决jquery中动态新增的元素节点无法触发事件问题的两种方法
2015/10/30 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
javascript HTML+CSS实现经典橙色导航菜单
2016/02/16 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
纯JS代码实现一键分享功能
2016/04/20 Javascript
AngularJS用户选择器指令实例分析
2016/11/04 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
dropload.js插件下拉刷新和上拉加载使用详解
2017/10/20 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
JS内部事件机制之单线程原理
2018/07/02 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
python文件的md5加密方法
2016/04/06 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
Django models filter筛选条件详解
2020/03/16 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
来自全球大都市的高级街头服饰:Pegador
2018/01/03 全球购物
Madewell澳大利亚官方网站:美国休闲服饰品牌
2019/07/18 全球购物
请解释virtual关键字的含义
2015/06/17 面试题
人力资源主管的岗位职责
2014/03/15 职场文书
岗位说明书范文
2014/05/07 职场文书
酒店周年庆活动方案
2014/08/21 职场文书
爱祖国爱家乡演讲稿
2014/09/02 职场文书
地陪导游欢迎词
2015/01/26 职场文书
律政俏佳人观后感
2015/06/09 职场文书
vmware虚拟机打不开vmx文件怎么办 ?vmware虚拟机vmx文件打开方法
2022/04/08 数码科技
教你nginx跳转配置的四种方式
2022/07/07 Servers