美文网首页OpenCV
HSV颜色检测

HSV颜色检测

作者: SIENTIST | 来源:发表于2018-08-03 23:08 被阅读0次

如果要进行颜色检测,HSV颜色空间是当前最常用的。

HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。这个模型中颜色的参数分别是:色调(H),饱和度(S),亮度(V)。

RGB和CMY颜色模型都是面向硬件的,而HSV(Hue Saturation Value)颜色模型是面向用户的。
HSV模型的三维表示从RGB立方体演化而来。设想从RGB沿立方体对角线的白色顶点向黑色顶点观察,就可以看到立方体的六边形外形。六边形边界表示色彩,水平轴表示纯度,明度沿垂直轴测量。


图片.png 图片.png

OpenCV中HSV各个分量的取值范围
色调 H : 0 ~ 180
用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°, 蓝色为240°。它们的补色是:黄色为60°,青色为180°, 品红为300°;

饱和度 S :0 ~ 255
饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。

亮度 V : 0 ~ 255
亮度表示颜色明亮的程度,对于光源色,亮度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。

若要识别某种颜色,HSV的3个分量的范围得自己调了,官方的颜色区域不是特别靠谱。
一点经验:亮度V 几乎对颜色的识别没有影响,亮度与颜色大概关系不大,只与环境中的光照有关,为了算法的适应性更强,可以把亮度V的范围调成0~255。
对颜色识别影响最大的是色调,这个得仔细调,当然,为了适应性强,范围最好调宽点。

转换成HSV颜色空间后,居然有种印象派画作的感觉了


hsv.jpg

以下的程序,能将一幅图像中的 红色、蓝色、黄色找出来:


srcImg.png
HSV_Result.png
int main()
{

    Mat srcImg = imread("3.jpg");  

    Mat hsvImg;

    //将RGB颜色空间转换为HSV颜色空间
    cvtColor(srcImg, hsvImg, COLOR_BGR2HSV); //CV_BGR2YCrCb

    imshow("hsv", hsvImg);

    int minH = 0; //26
    int maxH = 0; //34

    int minS = 0; //
    int maxS = 0;

    int minV = 0; //200
    int maxV = 0;

    Mat yellowImg, blueImg, redImg;

    for (int i = 0; i < 3; i++)
    {
        switch (i)
        {
            case 0: //黄色
                minH = 16; //26
                maxH = 35; //34

                minS = 160; //
                maxS = 255;

                minV = 50; //200
                maxV = 255;

                // inRange(原图像, 最小值的范围, 最大值的范围, 输出图像); //输出图像是黑白二值图像,其中 最小值<=像素点<=最大值 的像素点是白色
                inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), yellowImg); //Threshold the image
                break;

            case 1: //蓝色
                minH = 70; //26
                maxH = 120; //34

                minS = 150; //
                maxS = 255;

                minV = 50; //200
                maxV = 255;

                inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), blueImg); //Threshold the image
                break;

            case 2: //红色
                minH = 0; //26
                maxH = 15; //34

                minS = 160; //
                maxS = 255;

                minV = 50; //200
                maxV = 255;

                inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), redImg); 
                break;

            default:
                cout << "颜色标志输入错误" << endl;
        }
    }

    Mat resultImg;
    Mat yeBluImg;

    //bitwise_or(a, b, ab);
    //图像或 ,ab = a||b

    bitwise_or(yellowImg, blueImg, yeBluImg); //图像或 
    bitwise_or(yeBluImg, redImg, resultImg); //图像或

    imshow("result", resultImg);


    //开操作 (去除一些噪点)  如果二值化后图片干扰部分依然很多,增大下面的size
    Mat eleOpen = getStructuringElement(MORPH_RECT, Size(6, 6));
    morphologyEx(resultImg, resultImg, MORPH_OPEN, eleOpen);
    imshow("open", resultImg);


    waitKey(0);
    return 0;
}

    Mat resultImg;
    Mat yeBluImg;

    //bitwise_or(a, b, ab);
    //图像或 ,ab = a||b

    bitwise_or(yellowImg, blueImg, yeBluImg); //图像或 
    bitwise_or(yeBluImg, redImg, resultImg); //图像或

    imshow("result", resultImg);


    //开操作 (去除一些噪点)  如果二值化后图片干扰部分依然很多,增大下面的size
    Mat eleOpen = getStructuringElement(MORPH_RECT, Size(6, 6));
    morphologyEx(resultImg, resultImg, MORPH_OPEN, eleOpen);
    imshow("open", resultImg);


    waitKey(0);
    return 0;
}

相关文章

  • HSV颜色检测

    如果要进行颜色检测,HSV颜色空间是当前最常用的。 HSV(Hue, Saturation, Value)是根据颜...

  • 颜色转换,利用HSV颜色空间检测

    绘制颜色通道 绘制出这些通道的灰度版本 以便观察各通道的强度,像素越亮 代表的红色、绿色或蓝色值就越高。我们可以看...

  • 【DIP】人脸皮肤检测方法汇总

    Tags:DIP HSV 颜色阈值分割 先将图像转换到HSV空间,然后在HSV空间进行阈值分割两种颜色阈值都可以试...

  • 超简单的视频对象提取程序

    视频对象提取 与其说是视频对象提取,不如说是视频颜色提取,因为其本质还是使用了OpenCV的HSV颜色物体检测。 ...

  • Python颜色光谱单色效果图

    一、HSV(HSB)颜色模型   HSV,又称HSB颜色模型。 H是hue的首字母,表示色调,取值范围0到360,...

  • HSV颜色空间

    HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建...

  • 图像处理基本概念

    0、HSV HSV (Hue, Saturation, Value)颜色的参数分别是:色调(H),饱和度(S),明...

  • Fastled 02

    1 solid 全部关闭 2 HSV 颜色改变

  • 图像处理之_常用的色板

    1. 说明  有时候需要从图像中判断某种颜色,或者获取某个颜色区域,此时常用HSV色板判断。因为在HSV的色彩空间...

  • Python RGB 转HSV

    说明 opencv识别图像中的颜色时需要HSV参数,本文提供一个RGB转化HSV Python代码,方便开发中使用...

网友评论

    本文标题:HSV颜色检测

    本文链接:https://www.haomeiwen.com/subject/ldfpvftx.html