要点:

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. python学习Day03

    [主要内容] 1. 编码 1. 最早的计算机编码是ASCII. 美国人创建的. 包含了英文字母(大写字母, 小写字母). 数字, 标点等特殊字符!@#$% 128个码位 2**7 在此基础上加了一位 ...

  2. 3.部署场景1:带有遗留的Open vSwitch

    部署场景1:带有遗留的Open vSwitch 此场景描述了使用带有Open vSwitch(OVS)的ML2插件的OpenStack网络服务的(基本)实现. 遗留的实现通过为普通用户提供一种方法来管 ...

  3. 实验7:交换机IOS升级

    交换机IOS升级首先需要有IOS文件,如果没有备份原文件的话,可以找个同一版本的IOS来替代. 第一种方法:X-Modem 以前我曾经尝试过一种方法,就是当Flash被删除后,启动无法进入系统,可以用 ...

  4. javase第一章(了解java)

    ------------恢复内容开始------------ java介绍 java这门语言,如果你是一名IT从业者,那么就一定是会有所耳闻的,毕竟,这是编程史上其商业化最成功的一门语言,当然, 编程 ...

  5. 自学笔记系列:《Python学习手册 第五版》 -写在开始之前

    今年双十一,在当当网上买了这本书,很厚很厚的一本书,大概有将近1700页左右,的确是一个“大工程”, 关于这本书的学习,我想采用一种博客的方式进行,既是写给自己,也想分享给每一个对Python学习感兴 ...

  6. [Effective Java 读书笔记] 第三章类和接口 第二十三-- ??条

    第二十三条 请不要再新代码中使用原生态类型 1 使用原生态类型,就失去了泛型在安全性和表述性方面的所有优势,所以新代码中不要使用原生态类型 2 List<String>可以传递给List作 ...

  7. sql 忘记密码 解决方法(window cmd命令解决)

    cd wamp\bin\mysql\mysql5.6.17\bin mysqld --skip-grant-tables

  8. Java开发最佳实践(一) ——《Java开发手册》之"编程规约"

    Java开发手册版本更新说明 专有名词解释 一. 编程规约 (一) 命名风格 (二) 常量定义 (三) 代码格式 (四) OOP 规约 (五) 集合处理 (六) 并发处理 (七) 控制语句 (八) 注 ...

  9. lwip netbuf

    lwip2.0.2 netbuf_new——分配netbuf结构体的内存. netbuf_alloc,分配netbuf中pbuf内存(pbuf_alloc中PBUF_RAM类型,包括pbuf结构体和p ...

  10. 非对称加密 秘钥登录 https

    非对称加密简介: 对称加密算法在加密和解密时使用的是同一个秘钥:而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)私有密钥(private key,简 ...