一、色彩空间的转换

代码如下:

#色彩空间转换

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

运行结果:

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图像处理—— 色彩空间转换的详细内容,更多关于Python+OpenCV图像处理的资料请关注我们其它相关文章!

本文标题: Python+OpenCV图像处理—— 色彩空间转换

本文地址: http://www.cppcns.com/jiaoben/python/356831.html

python数字图像处理、色彩空间类型转换_Python+OpenCV图像处理—— 色彩空间转换...相关推荐

  1. python 检测直线 交点_Python+OpenCV图像处理——实现直线检测

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

  2. python怎么打印图片_Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头...

    一. 打印图片属性.设置图片存储路径 代码如下: #打印图片的属性.保存图片位置 import cv2 as cv import numpy as np #numpy是一个开源的python科学计算库 ...

  3. [Python图像处理] 三十五.OpenCV图像处理入门、算数逻辑运算与图像融合(推荐)

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  4. python 数字运算及格式化_Python基础教程(3)Python数据类型、运算与格式化

    一.Python的数据类型 主要分为了数字型和非数字型两个大类,其中数字型又包含整形(int).浮点型(float).布尔型(bool),而非数字分为字符串(str).列表(list).元组(tupl ...

  5. python数字图像处理、色彩空间类型转换_常用的色彩空间的转换

    转载的,留下学习! using System; using System.Drawing; namespace EngTyping.Class { /// /// ColorHandle 处理Rgb| ...

  6. python图像处理模糊_Python+OpenCV图像处理之模糊操作

    模糊操作是图像处理中最简单和常用的操作之一,该使用的操作之一原因就为了给图像预处理时减低噪声,基于数学的卷积操作 均值模糊,函数 cv2.blur(image,(5,5)),这是一个平滑图片的函数,它 ...

  7. python图像轮廓识别_Python+OpenCV图像处理(十六)—— 轮廓发现

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

  8. python像素处理_Python+OpenCV图像处理(五)—— 像素运算

    最近在忙毕业设计,只能偶尔更新博客........ 一.像素的算术运算 像素的算术运算涉及加减乘除等基本运算(要进行算术运算,两张图片的形状(shape)必须一样) 代码如下: #像素的算术运算(加. ...

  9. python的窗口处理模块_python的图像处理模块

    除了opencv专门用来进行图像处理,可以进行像素级.特征级.语义级.应用级的图像处理外,python中还有其他库用来进行简单的图像处理,比如图像的读入和保存.滤波.直方图均衡等简单的操作,下面对这些 ...

最新文章

  1. 如何实现phpcms v9_4X版本tag的伪静态?
  2. 怎样熟练使用一项技术
  3. 使用VMware Infrastructure Client中的VMware Server 2.0.x的管理
  4. mysql timeout知多少
  5. django 操作MySQL 中文乱码_Django 连接mysql数据库中文乱码
  6. JAVA并行框架:Fork/Join
  7. html css模仿实例,HTML+CSS模仿大学网站主页
  8. mysql5.7参数简单介绍
  9. 关于家庭无线局域网的连接
  10. android中Intent的一些用法和总结
  11. 双亲委托类加载机制_图解JVM类加载机制和双亲委派模型
  12. 鸿蒙系统的平板电脑,亓纪的想法 篇三百六十三:骁龙870+鸿蒙2.0!首款鸿蒙系统平板曝光,支持第二代M-Pencil...
  13. orangepi获取cpu温度
  14. 矩阵运算_Sophus库的使用
  15. 计算机基础854哈工大,854计算机基础大纲
  16. mybatis在关联映射中,引入外部xml文件中定义的对象
  17. 2022年测试工程师面试题大合集「 功能测试,自动化测试等」300道题
  18. ps中怎么画直线和画参考线
  19. 我如何建立热线电话喀拉拉邦并为抗洪救灾做出了贡献
  20. 跟这台计算机连接的一个USB设备运行不正常

热门文章

  1. 行走方案问题(动态规划实现)
  2. 详解JavaScript中ES5和ES6的类、继承之间区别和联系
  3. matlab基础(0)
  4. Java是如何加载资源文件的?(源码解毒)
  5. Math.Celing、Math.Floor、Math.DivRem与Math.BigMul
  6. 洛谷1042 乒乓球 解题报告
  7. 前端求职-htmlcss
  8. C++ STL Pair
  9. 初等数学O 集合论基础 第一节 集合及其基本运算、de Moivre公式
  10. Linux查看网络信息