Python+OpenCV图像处理—— 色彩空间转换

作者:蛋片鸡 时间:2022-02-12 16:28:01 

一、色彩空间的转换

代码如下:


#色彩空间转换
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是单通道图像

来源:https://www.cnblogs.com/FHC1994/p/9002331.html

标签:python,openCV,图像处理,色彩空间
0
投稿

猜你喜欢

  • python实现门限回归方式

    2023-12-27 09:19:06
  • Python爬虫逆向分析某云音乐加密参数的实例分析

    2022-05-25 20:33:14
  • Numpy数组转置的实现

    2022-10-16 09:15:34
  • 一篇文章了解Python中常见的序列化操作

    2023-01-22 05:22:20
  • python爬取Ajax动态加载网页过程解析

    2023-05-15 15:51:47
  • Django+Ajax+jQuery实现网页动态更新的实例

    2023-02-11 03:23:19
  • python偏函数的实例用法总结

    2021-06-05 03:42:13
  • python实现半自动化发送微信信息

    2023-07-16 09:15:38
  • python-opencv在有噪音的情况下提取图像的轮廓实例

    2023-01-10 08:48:36
  • Python中如何创建多线程?

    2022-11-25 15:52:34
  • Docker部署Python爬虫项目的方法步骤

    2023-03-27 14:45:21
  • Django 源码WSGI剖析过程详解

    2023-09-14 22:19:58
  • ASP程序中使用断开的数据记录集的代码

    2012-12-04 20:20:28
  • Python设计足球联赛赛程表程序的思路与简单实现示例

    2023-05-02 20:58:05
  • Python真题案例之蛇形数组详解

    2021-12-09 11:00:40
  • 聊天室php&mysql(五)

    2023-11-19 20:18:22
  • Python调用腾讯云短信服务发送手机短信

    2021-10-07 16:55:38
  • js 轮播效果实例分享

    2023-07-16 00:42:43
  • Python实现通讯录功能

    2022-06-28 22:33:26
  • python替换字符串中的子串图文步骤

    2021-06-23 22:02:47
  • asp之家 网络编程 m.aspxhome.com