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 字符串格式化输出(format/printf)
Jul 21 Python
Python 元类实例解析
Apr 04 Python
matplotlib subplots 设置总图的标题方法
May 25 Python
Python3.6简单的操作Mysql数据库的三个实例
Oct 17 Python
python简单验证码识别的实现方法
May 10 Python
Python实现图片批量加入水印代码实例
Nov 30 Python
Python模块future用法原理详解
Jan 20 Python
解决django FileFIELD的编码问题
Mar 30 Python
如何在django中实现分页功能
Apr 22 Python
Python如何实现远程方法调用
Aug 07 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
Jan 05 Python
教你怎么用Python操作MySql数据库
May 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
php 调用远程url的六种方法小结
2009/11/02 PHP
smarty基础之拼接字符串的详解
2013/06/18 PHP
PHP判断变量是否为0的方法
2014/02/08 PHP
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
2015/03/17 PHP
PHP自定义函数获取URL中一级域名的方法
2016/08/23 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
javascript学习总结之js使用技巧
2015/09/02 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
React组件内事件传参实现tab切换的示例代码
2018/07/04 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
electron 如何将任意资源打包的方法步骤
2020/04/16 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
[05:06]TI4西雅图DOTA2前线报道 海涛密探LGD训练
2014/07/09 DOTA
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
Python获取脚本所在目录的正确方法
2014/04/15 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
2016/06/02 Python
Python下的Softmax回归函数的实现方法(推荐)
2017/01/26 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
Python函数定义及传参方式详解(4种)
2019/03/18 Python
python实现计数排序与桶排序实例代码
2019/03/28 Python
django数据库自动重连的方法实例
2019/07/21 Python
Python中内建模块collections如何使用
2020/05/27 Python
Python监听剪切板实现方法代码实例
2020/11/11 Python
HTML5 本地存储实现购物车功能
2017/09/07 HTML / CSS
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
个人反四风对照检查材料思想汇报
2014/09/23 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
亲戚关系证明
2015/06/24 职场文书
新手入门Mysql--sql执行过程
2021/06/20 MySQL