Python+OpenCV图像处理—— 色彩空间转换
一、色彩空间的转换
代码如下:
#色彩空间转换 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进阶书目串烧
推荐阅读
-
Android 图像处理(类型转换,比例缩放,倒影,圆角)的小例子
-
Android程序开发如何处理图像格式类及图像转换
-
Android 图像处理(类型转换,比例缩放,倒影,圆角)的小例子
-
【two 打卡】图像处理基础 python+opencv(超基础)
-
荐 opencv进阶学习笔记2:numpy操作图像,色彩空间,查找指定颜色范围,通道分离与合并
-
数字图像处理与Python实现-颜色空间转换-RGB颜色空间与YUV颜色空间转换
-
Python数字图像处理教程之图像数据类型以及颜色空间转换
-
数字图像处理与Python实现-颜色空间转换-RGB颜色空间与YCbCr颜色空间转换
-
数据压缩学习实验(三)PNG文件读取及转换至YUV色彩空间的C++实现
-
Android程序开发如何处理图像格式类及图像转换