09 图像色彩空间转换
代码
import cv2 as cv
src = cv.imread("../image/coins.jpg")
cv.namedWindow("rgb", cv.WINDOW_AUTOSIZE)
cv.imshow("rgb", src)
# RGB to HSV
hsv = cv.cvtColor(src, cv.COLOR_BGR2HSV)
cv.imshow("hsv", hsv)
# RGB to YUV
yuv = cv.cvtColor(src, cv.COLOR_BGR2YUV)
cv.imshow("yuv", yuv)
# RGB to YUV
ycrcb = cv.cvtColor(src, cv.COLOR_BGR2YCrCb)
cv.imshow("ycrcb", ycrcb)
src2 = cv.imread("../image/green_clothes.jpg");
cv.imshow("src2", src2)
hsv = cv.cvtColor(src2, cv.COLOR_BGR2HSV)
mask = cv.inRange(hsv, (35, 43, 46), (99, 255, 255))
cv.imshow("mask", mask)
cv.waitKey(0)
cv.destroyAllWindows()
实验结果
解释
常见色彩空间
- RGB色彩空间
- HSV色彩空间
HSV
是一种比较直观的颜色模型,所以在许多图像编辑工具中应用比较广泛,这个模型中颜色的参数分别是:色调(H, Hue)
,饱和度(S,Saturation)
,明度(V, Value)
。
2.利用openCV中cvSplit函数的在选择图像IPL_DEPTH_32F类型时,H取值范围是0-360,S取值范围是0-1(0%-100%),V取值范围是0-1(0%-100%)。
3.利用openCV中cvSplit函数的在选择图像IPL_DEPTH_8UC类型时,H取值范围是0-180,S取值范围是0-255,V取值范围是0-255。
- YUV色彩空间
- YCrCb色彩空间
相关函数
- 色彩空间转换cvtColor
- 提取指定色彩范围区域inRange
cv2.inRange(hsv, lower, upper)
第一个参数
:hsv指的是原图
第二个参数
:lower指的是图像中低于这个lower的值,图像值变为0
第三个参数
:upper指的是图像中高于这个upper的值,图像值变为0
就是将低于lower和高于upper的部分分别变成0,lower~upper之间的值变成255,具体实现看代码19-23行
所有内容均来源于贾志刚老师的知识星球——OpenCV研习社,本文为个人整理学习,已获得贾老师授权,有兴趣、有能力的可以加入贾老师的知识星球进行深入学习。