8.通过色彩空间范围获取图像

知道了色彩空间

然后结合numpy数组就可以根据色彩空间的范围截取画面中的颜色了

hsvObj = cv.inRange(hsv, lower_hsv, up_hsv)

核心就是这个,通过色彩空间的范围来截取图片获得一个二值图像

也就是纯黑纯白的图像

各个颜色在HSV色彩空间的取值范围如下图

  绿
H 0-180 0-180 0-180 0-10,156-180 11-25 26-34 35-77 78-99 100-124 125-155
S 0-255 0-43 0-30 43-255 43-255 43-255 43-255 43-255 43-255 43-255
V 0-46 46-220 221-255 46-255 46-255 46-255 46-255 46-255 46-255 46-255

代码

import cv2 as cv
import numpy as np

def extrace_object():
    img = cv.imread("image/bayer.png")
    cv.imshow("img", img)
    rgb = cv.cvtColor(img, cv.COLOR_BGR2RGB)
    hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
    lower_rgb=np.array([0, 0, 0])
    up_rgb = np.array([0, 255, 0])
    rgbObj = cv.inRange(rgb, lower_rgb, up_rgb)
    cv.imshow("rgbObj", rgbObj)
    lower_hsv = np.array([37, 43, 46])
    up_hsv = np.array([77, 255, 255])
    hsvObj = cv.inRange(hsv, lower_hsv, up_hsv)
    cv.imshow("hsvObj", hsvObj)

extrace_object()
cv.waitKey(0)

我通过一个RGB的色彩空间和HSV的色彩空间来截取绿色

得到的效果:

8.通过色彩空间范围获取图像_第1张图片

通过RGB的纯绿截取到了一块HSV的绿色取值范围获取不到的范围

是程序啥了还是我代码写的不对呢?

难道HSV的范围不包含RGB的纯绿色吗?

我用取色器再这个位置找了半天也没发现有纯绿色,难道真是程序有问题?下图

最后我动用了PS,把红和蓝的通道关掉,也任然没找到绿色

8.通过色彩空间范围获取图像_第2张图片

so,是我代码有问题,但是我不知道问题出在什么地方,RGB的[0,0,0]到[0,255,0]难道不是表示纯绿色吗

如果没有纯绿色应该过滤的到一幅全黑的图片才对,现在有白色区域但是没有绿色

没弄明白,有明白的给我留言问题出在哪里~

你可能感兴趣的:(8.通过色彩空间范围获取图像)