一、色彩空间的转换
代码如下:
#色彩空间转换 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图像处理的资料请关注其它相关文章!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】
- 谭咏麟.2022-倾·听【环球】【WAV+CUE】
- 4complete《丛生》[320K/MP3][85.26MB]
- 4complete《丛生》[FLAC/分轨][218.01MB]