opencv —— 同时识别三种颜色
要点:
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 —— 同时识别三种颜色的更多相关文章
- Android 接入 OpenCV库的三种方式
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少 ...
- 如何使用MATLAB对图片的RGB三种颜色进行提取
参考: https://jingyan.baidu.com/article/456c463b41de5f0a5831448e.html matlab在图像处理方面,具有很强大的应用.下面将分享如何使用 ...
- C++ 用RGB 三种颜色绘图
#include <iostream> #include <cmath> #include <cstdlib> #define DIM 1024 #define D ...
- css渐变写法 从左到右渐变三种颜色示例;
background:linear-gradient(to right,#7f06a8,#a02bc2,#7f06a8)
- Latex中如何设置字体颜色(三种方式)
1.直接使用定义好的颜色 \usepackage{color} \textcolor{red/blue/green/black/white/cyan/magenta/yellow}{text} 其中t ...
- Java基于opencv实现图像数字识别(三)—灰度化和二值化
Java基于opencv实现图像数字识别(三)-灰度化和二值化 一.灰度化 灰度化:在RGB模型中,如果R=G=B时,则彩色表示灰度颜色,其中R=G=B的值叫灰度值:因此,灰度图像每个像素点只需一个字 ...
- 相机标定 matlab opencv ROS三种方法标定步骤(2)
二 ubuntu下Opencv的相机标定 一般直接用Opencv的源码就可以进行相机的标定,但是可能只是会实现结果,却不懂实现的过程,我也是模模糊糊的看了<计算机视觉中的多视图几何>以及 ...
- opencv图像阈值设置的三种方法
1.简单阈值设置 像素值高于阈值时,给这个像素赋予一个新值(可能是白色),否则我们给它赋予另外一种颜色(也许是黑色).这个函数就是 cv2.threshhold().这个函数的第一个参数就是原图像 ...
- OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰)
OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰) 前文曾详细探讨了关于OpenCV的使用,原本以为天下已太平.但不断有人反 ...
随机推荐
- convertto-securestring结果 使用python解密
根据微软帮助文档,convertto-securestring有两种加密模式.如果在指定密码的情况下,则使用aes加密,否则使用windows dpapi加密.而且aes加密也没有指明iv值与加密模式 ...
- 场景6:具有OpenvSwitch的提供商网络
此场景描述了使用带有Open vSwitch(OVS)的ML2插件的OpenStack网络服务的提供者网络实现. 在OpenStack网络引入分布式虚拟路由器之前,所有网络通信都通过一个或多个专门的网 ...
- Codeforces_327_C
http://codeforces.com/problemset/problem/327/C 等比求和相加,有mod的出现,所以要算逆元. #include<iostream> #incl ...
- HDU_2571_DP
http://acm.hdu.edu.cn/showproblem.php?pid=2571 简单dp,从上到下,从左到右依次更新每一格的最大幸运值. #include<iostream> ...
- 超长可视化指南!带你理清K8S部署的故障排查思路,让bug无处遁形
本文将帮助你厘清在Kubernetes中调试 deployment的思路.下图是完整的故障排查思路,如果你想获得更清晰的图片,请在公众号后台(RancherLabs)回复"troublesh ...
- centos7 安装 iRedmail 后 给nginx添加虚拟主机
iRedmail安装参考官方文档和 https://ywnz.com/linuxyffq/4563.html 准备工作 更新操作系统 yum update -y 安装必要组件 yum install ...
- 阿里云服务器ECS Ubuntu18.04 安装mysql
ubuntu系统好了,这下我应该安装MySQL数据库了.在安装过程中,遇到好多坑,下面是我的安装过程. 1.在阿里云控制台,用vnc登录到服务器. 用新的用户登录到Ubuntu用户系统. 打开终端: ...
- Linux压缩归档管理
什么是压缩? 压缩就是用时间换取空间,CPU的时间换取磁盘的空间,下载传输的过程中可以节约带宽. zip/unzip zip支持多平台,支持归档压缩.文件经它压缩后会另外产生具有".zip& ...
- 字符串(Java.lang.String类)的使用
java字符串就是Unicode字符序列,例如"Java"就是四个Unicode字符 java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义的类String.每个用 ...
- 学习了解CSS3发展方向和CSS样式与优先级
通过学习CSS3游戏介绍.CSS样式和优先级章节,了解到html5+css3+js不光可以实现动画,其次可以往这个游戏与建模方向发展,更多css3特效访问Gerard Ferrandez on Cod ...