zoukankan      html  css  js  c++  java
  • opencv —— 同时识别三种颜色

    要点:

    1.识别一种颜色

    minH = 16; //色相
    maxH = 35; 
    
    minS
    = 160; //饱和度 maxS = 255;
    minV
    = 50; //亮度
    maxV
    = 255; // inRange(原图像, 最小值的范围, 最大值的范围, 输出图像); //将图像二值化,即输出图像是黑白二值图像,其中 最小值<=像素点<=最大值 的像素点是白色 inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), yellowImg);

    2.识别图片中的黄蓝红三色

    //创建三个 Mat 来分别存储识别黄蓝红三色并二值化后的图片
    Mat yellowImg, blueImg, redImg;
    
    for (int i = 0; i < 3; i++){
        switch (i){
        case 0: //黄色
            minH = 16; 
            maxH = 35; 
    
            minS = 160; 
            maxS = 255;
    
            minV = 50; 
            maxV = 255;
    
            // inRange(原图像, 最小值的范围, 最大值的范围, 输出图像);
            //将图像二值化,即输出图像是黑白二值图像,其中 最小值<=像素点<=最大值 的像素点是白色
            inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), yellowImg); 
            break;
    
        case 1: //蓝色
            minH = 70; 
            maxH = 120;
    
            minS = 150; 
            maxS = 255;
    
            minV = 50; 
            maxV = 255;
    
            inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), blueImg);
            break;
    
        case 2: //红色
            minH = 0; 
            maxH = 15; 
    
            minS = 160;
            maxS = 255;
    
            minV = 50; 
            maxV = 255;
    
            inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), redImg);
            break;
    
        default:
            printf("颜色标志输入错误
    ");
        }
    }

    3.合并三张图片

    Mat resultImg;
    Mat yeBluImg;
    
    //图像算数运算————bitwise_or() 合并运算(或) 
    bitwise_or(yellowImg, blueImg, yeBluImg);
    bitwise_or(yeBluImg, redImg, resultImg);

    4.图片去噪

    //开操作 (去除一些噪点):先腐蚀,再膨胀,可清除一些小东西(亮的),放大局部低亮度的区域
    //如果二值化后图片干扰部分依然很多,增大下面的size
    Mat eleOpen = getStructuringElement(MORPH_RECT, Size(6, 6));//返回指定形状和尺寸的结构元素 morphologyEx(resultImg, resultImg, MORPH_OPEN, eleOpen);

    代码示例:

    #include<opencv.hpp>
    using namespace cv;
    using namespace std;
    int main(){
    
        Mat srcImg = imread("C:/Users/齐明洋/Desktop/tem2.png");
    
        Mat hsvImg;
    
        //将RGB颜色空间转换为HSV颜色空间
        cvtColor(srcImg, hsvImg, COLOR_BGR2HSV); 
    
        int minH = 0; 
        int maxH = 0; 
    
        int minS = 0; 
        int maxS = 0;
    
        int minV = 0; 
        int maxV = 0;
    
        Mat yellowImg, blueImg, redImg;
    
        for (int i = 0; i < 3; i++){
            switch (i){
            case 0: //黄色
                minH = 16; 
                maxH = 35; 
    
                minS = 160; 
                maxS = 255;
    
                minV = 50; 
                maxV = 255;
    
                // inRange(原图像, 最小值的范围, 最大值的范围, 输出图像);
                //将图像二值化,即输出图像是黑白二值图像,其中 最小值<=像素点<=最大值 的像素点是白色
                inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), yellowImg); 
                break;
    
            case 1: //蓝色
                minH = 70; 
                maxH = 120;
    
                minS = 150; 
                maxS = 255;
    
                minV = 50; 
                maxV = 255;
    
                inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), blueImg);
                break;
    
            case 2: //红色
                minH = 0; 
                maxH = 15; 
    
                minS = 160;
                maxS = 255;
    
                minV = 50; 
                maxV = 255;
    
                inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), redImg);
                break;
    
            default:
                printf("颜色标志输入错误
    ");
            }
        }
    
        Mat resultImg;
        Mat yeBluImg;
    
        //图像算数运算————合并(或)
        bitwise_or(yellowImg, blueImg, yeBluImg); 
        bitwise_or(yeBluImg, redImg, resultImg); 
    
        //开操作 (去除一些噪点) 如果二值化后图片干扰部分依然很多,增大下面的size
        Mat eleOpen = getStructuringElement(MORPH_RECT, Size(6, 6));//返回指定形状和尺寸的结构元素
        morphologyEx(resultImg, resultImg, MORPH_OPEN, eleOpen);
    

          imshow("原始图片", srcImg);
          imshow("识别结果", resultImg);

        waitKey(0);
        return 0;
    }

    运行结果:

  • 相关阅读:
    学员操作——隔行变色
    jQuery基础及选择器(1)
    学员操作——组合继承
    JavaScript面向对象
    学员操作——创建继承person的student子类
    学员操作——flower函数
    JavaScript操作DOM(2)
    JavaScript操作DOM(1)
    学员操作——制作秒表定时器
    学员操作——制作5s关闭广告
  • 原文地址:https://www.cnblogs.com/bjxqmy/p/11815440.html
Copyright © 2011-2022 走看看