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的SQLalchemy模块连接与操作MySQL的基础示例
Jul 11 Python
基于Python函数的作用域规则和闭包(详解)
Nov 29 Python
python字符串与url编码的转换实例
May 10 Python
python3读取csv和xlsx文件的实例
Jun 22 Python
如何在Django配置文件里配置session链接
Aug 06 Python
Python3操作Excel文件(读写)的简单实例
Sep 02 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
opencv3/C++ 平面对象识别&透视变换方式
Dec 11 Python
Python监控服务器实用工具psutil使用解析
Dec 19 Python
Python异常处理机制结构实例解析
Jul 23 Python
OpenCV读取与写入图片的实现
Oct 13 Python
浅析python实现动态规划背包问题
Dec 31 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
文章推荐系统(二)
2006/10/09 PHP
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
PHP中比较时间大小实例
2014/08/21 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
php英文单词统计器
2016/06/23 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
js获取RadioButtonList的Value/Text及选中值等信息实现代码
2013/03/05 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
jQuery Validation PlugIn的使用方法详解
2015/12/18 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
2016/09/29 Javascript
用jquery快速解决IE输入框不能输入的问题
2016/10/04 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
python zip文件 压缩
2008/12/24 Python
Python Tkinter GUI编程入门介绍
2015/03/10 Python
Python实现的下载网页源码功能示例
2017/06/13 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
Python的UTC时间转换讲解
2019/02/26 Python
Python Matplotlib实现三维数据的散点图绘制
2019/03/19 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
2019/04/04 Python
pandas按行按列遍历Dataframe的几种方式
2019/10/23 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
浅谈html5 响应式布局
2014/12/24 HTML / CSS
Original Penguin美国官网:布拉德皮特、强尼德普喜爱的服装品牌
2016/10/25 全球购物
党校培训思想汇报
2013/12/30 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
2021/04/01 PHP
原生JS封装vue Tab切换效果
2021/04/28 Vue.js
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android
mysql 联合索引生效的条件及索引失效的条件
2021/11/20 MySQL
JavaScript实现队列结构过程
2021/12/06 Javascript