一、色彩空间的转换

代码如下:

#色彩空间转换
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()

运行结果:

注意:参考博文:https://blog.csdn.net/a352611/article/details/51416769

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)就是灰度图。

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

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

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

补注:

1.HSV如下图:

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()

运行结果:

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

注意:

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分量范围表如下:(这里是三通道的)

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

代码如下:

#通道的分离与合并以及某个通道值的修改
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图像处理(四)—— 色彩空间的更多相关文章

  1. Python+OpenCV图像处理(一)

    Python+OpenCV图像处理(一): 读取,写入和展示图片 调用摄像头拍照 调用摄像头录制视频 1. 读取.写入和展示图片 图像读入:cv2.imread() 使用函数cv2.imread() ...

  2. Python+OpenCV图像处理(一)——读取显示一张图片

    先在此处先声明,后面学习python+opencv图像处理时均参考这位博主的博文https://blog.csdn.net/u011321546/article/category/7495016/2? ...

  3. Python+OpenCV图像处理(十四)—— 直线检测

    简介: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.主要用来从图像中分离出具有某种相同特征的几何形状(如,直线 ...

  4. Python+OpenCV图像处理(八)—— 图像直方图

    直方图简介:图像的直方图是用来表现图像中亮度分布的直方图,给出的是图像中某个亮度或者某个范围亮度下共有几个像素.还不明白?就是统计一幅图某个亮度像素数量.比如对于灰度值12,一幅图里面有2000 个像 ...

  5. Python+OpenCV图像处理(九)—— 模板匹配

    百度百科:模板匹配是一种最原始.最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配问题.它是图像处理中最基本.最常用的匹配方法.模板匹配具有自身的局限性, ...

  6. Python+OpenCV图像处理(七)—— 滤波与模糊操作

    过滤是信号和图像处理中基本的任务.其目的是根据应用环境的不同,选择性的提取图像中某些认为是重要的信息.过滤可以移除图像中的噪音.提取感兴趣的可视特征.允许图像重采样等等.频域分析将图像分成从低频到高频 ...

  7. 如何让一张图片变成二值图像?python+opencv图像处理

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:张熹熹 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...

  8. Python+OpenCV图像处理(十六)—— 轮廓发现

    简介:轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓发现结果. 代码如下: import cv2 as cv import numpy as np def c ...

  9. Python+OpenCV图像处理(十五)—— 圆检测

    简介: 1.霍夫圆变换的基本原理和霍夫线变换原理类似,只是点对应的二维极径.极角空间被三维的圆心和半径空间取代.在标准霍夫圆变换中,原图像的边缘图像的任意点对应的经过这个点的所有可能圆在三维空间用圆心 ...

随机推荐

  1. Python创建目录

    需要包含os模块进来,使用相关函数即可实现目录的创建 1.创建目录要用到的函数: (1)os.path.exists(path) 判断一个目录是否存在 (2)os.makedirs(path) 多层创 ...

  2. seller【2】Mock数据(接口访问配置)

    Mock数据 在文件[vue.config.js] - devServer 字段 - before(app)函数配置数据接口访问 const appData = require('./data.jso ...

  3. xtrabackup全库还原+binlog日志还原

    1.场景 mysql数据库误删某个库.误删表或者误删除数据 如下模拟图:备份策略定为每天凌晨进行全库备份,在B时间点进行了误操作以后,有两种恢复场景,一种是恢复到B时间点误操作前,一种是恢复到C时间点 ...

  4. [redis]redis常用

    https://redis.io/topics/quickstart $ redis-cli ping PONG redis-server is the Redis Server itself. re ...

  5. MySQL数据库之part2

    一.索引原理与慢查询优化 一.介绍 1.为何需要有索引 一般的应用系统,读写比例是10:1左右,而且插入操作和一般的更新操作很少出现性能问题.在生产环境中,我们遇到最多的.也是最容易出问题的还是一些负 ...

  6. php-fpm sock 进程池优化

    更改tcp为sock ;listen = 127.0.0.1:9000 listen = /dev/shm/php-cgi.sock pm = static \\静态进程池 pm.max_childr ...

  7. Ubuntu16.04源的问题

    今天执行下列语句 sudo apt-get update报错 安装redis时 sudo apt-get install redis-server报错 报错内容大致如下: 在网上查了一下是源的问题,我 ...

  8. php 编译安装 mysql.so

    编译mysql.so # 进入php-5.2.14源码目录 cd /usr/local/src/php- # 进入 mysql ext 的源码目录 cd ext/mysql # 构建编译配置, 假设p ...

  9. redhat6.5 linux 安装mysql5.6.27

    1.yum安装mysql(root身份),适用于红帽6.5 yum install mysql-server mysql-devel mysql -y 如没有配置yum,请参见博客:http://ww ...

  10. Redux 笔记详解

    npm install --save redux 多数情况下,你还需要使用 React 绑定库和开发者工具. npm install --save react-redux npm install -- ...