要点:

1.识别一种颜色

minH = ; //色相
maxH = ;

minS = ; //饱和度
maxS = ;

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

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

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

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(, ));//返回指定形状和尺寸的结构元素
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 = ;
int maxH = ; int minS = ;
int maxS = ; int minV = ;
int maxV = ; Mat yellowImg, blueImg, redImg; for (int i = ; i < ; i++){
switch (i){
case : //黄色
minH = ;
maxH = ; minS = ;
maxS = ; minV = ;
maxV = ; // inRange(原图像, 最小值的范围, 最大值的范围, 输出图像);
//将图像二值化,即输出图像是黑白二值图像,其中 最小值<=像素点<=最大值 的像素点是白色
inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), yellowImg);
break; case : //蓝色
minH = ;
maxH = ; minS = ;
maxS = ; minV = ;
maxV = ; inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), blueImg);
break; case : //红色
minH = ;
maxH = ; minS = ;
maxS = ; minV = ;
maxV = ; inRange(hsvImg, Scalar(minH, minS, minV), Scalar(maxH, maxS, maxV), redImg);
break; default:
printf("颜色标志输入错误\n");
}
} Mat resultImg;
Mat yeBluImg; //图像算数运算————合并(或)
bitwise_or(yellowImg, blueImg, yeBluImg);
bitwise_or(yeBluImg, redImg, resultImg); //开操作 (去除一些噪点) 如果二值化后图片干扰部分依然很多,增大下面的size
Mat eleOpen = getStructuringElement(MORPH_RECT, Size(, ));//返回指定形状和尺寸的结构元素
morphologyEx(resultImg, resultImg, MORPH_OPEN, eleOpen);

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

    waitKey();
return ;
}

运行结果:

opencv —— 同时识别三种颜色的更多相关文章

  1. Android 接入 OpenCV库的三种方式

           OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少 ...

  2. 如何使用MATLAB对图片的RGB三种颜色进行提取

    参考: https://jingyan.baidu.com/article/456c463b41de5f0a5831448e.html matlab在图像处理方面,具有很强大的应用.下面将分享如何使用 ...

  3. C++ 用RGB 三种颜色绘图

    #include <iostream> #include <cmath> #include <cstdlib> #define DIM 1024 #define D ...

  4. css渐变写法 从左到右渐变三种颜色示例;

    background:linear-gradient(to right,#7f06a8,#a02bc2,#7f06a8)

  5. Latex中如何设置字体颜色(三种方式)

    1.直接使用定义好的颜色 \usepackage{color} \textcolor{red/blue/green/black/white/cyan/magenta/yellow}{text} 其中t ...

  6. Java基于opencv实现图像数字识别(三)—灰度化和二值化

    Java基于opencv实现图像数字识别(三)-灰度化和二值化 一.灰度化 灰度化:在RGB模型中,如果R=G=B时,则彩色表示灰度颜色,其中R=G=B的值叫灰度值:因此,灰度图像每个像素点只需一个字 ...

  7. 相机标定 matlab opencv ROS三种方法标定步骤(2)

    二  ubuntu下Opencv的相机标定 一般直接用Opencv的源码就可以进行相机的标定,但是可能只是会实现结果,却不懂实现的过程,我也是模模糊糊的看了<计算机视觉中的多视图几何>以及 ...

  8. opencv图像阈值设置的三种方法

    1.简单阈值设置   像素值高于阈值时,给这个像素赋予一个新值(可能是白色),否则我们给它赋予另外一种颜色(也许是黑色).这个函数就是 cv2.threshhold().这个函数的第一个参数就是原图像 ...

  9. OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰)

    OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰) 前文曾详细探讨了关于OpenCV的使用,原本以为天下已太平.但不断有人反 ...

随机推荐

  1. Elasticsearch系列

    一.Elasticsearch简介 二.elasticsearch集群监控相关

  2. 批处理(BAT) Ping监控, 结果记录入日志文件

    ::执行效果 @echo off ::等待用户输入需要监控IP set /p ip=Input the IP required to monitor: echo executing...... :st ...

  3. HTML兼容问题及解决办法

    标准浏览器子元素不会撑开父元素设置好的宽度,IE6下会的: <style> .box{ width:400px;} .left{ width:200px;height:300px;back ...

  4. java架构之路-(微服务专题)nacos集群精讲实战

    上次回顾: 上次博客,我们主要说了微服务的发展历程和nacos集群单机的搭建,单机需要-m standalone启动,集群建议使用nginx做一下反向代理,自行保证mysql和ngxin的高可用. 本 ...

  5. 1.3创建你的第一个Android项目——Android第一行代码(第二版)笔记

    创建HelloWorld项目 如果是第一次,会经过漫长的等待. 启动模拟器 可以用第三方模拟器,也可以用官方集成的 点击后出现如下界面,可创建多个模拟器,如图,我已经创建好了一个,如果你没有,就点击下 ...

  6. Python原来这么好学-2.1节: 选择PyCharm作为开发工具

    这是一本教同学们彻底学通Python的高质量学习教程,认真地学习每一章节的内容,每天只需学好一节,帮助你成为一名卓越的Python程序员: 本教程面向的是零编程基础的同学,非科班人士,以及有一定编程水 ...

  7. Golang robfig/cron 实现解析

    ​    robfig/cron是GO语言中一个定时执行注册任务的package,  最近我在工程中使用到了它,由于它的实现优雅且简单(主要是简单),所以将源码过了一遍,记录和分享在此. 文档:htt ...

  8. 【JavaScript】进制转换&位运算,了解一下?

    前言 在一般的代码中很少会接触到进制和位运算,但这不代表我们可以不去学习它.作为一位编程人员,这些都是基础知识.如果你没有学过这方面的知识,也不要慌,接下来的知识并不会很难.本文你将会学习到: 进制转 ...

  9. jenkins 介绍 安装

    Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作, 旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. Jenkins是可扩展的持续集成.交付.部 ...

  10. Cacti 安装插件

            Cacti本身可以以图形化界面显示出流量状态,cacti也可以安装插件,通过插件,cacti的功能被进一步强大:可以监控服务器状态:发送邮件通知:短信通知等.        0.88之 ...