标签:识别 img yellow OpenCV Scalar 轮廓 red 255
基础知识
HSV图像
注意如果用8U来存HSV图像,H的范围是0~180,S、V的范围是都是0~255
H坐标颜色对应
红0
黄30
绿60
青90
蓝120
紫150
大概上下浮动10左右可以提取某一种颜色
调完颜色参数之后调S(饱和度参数),最后再调亮度参数
使用OpenCV的inrange函数,可以快速进行颜色提取
轮廓识别
直接使用findContours函数
findContours(Mat binImg, vector<vector<Point>> contours, vector<Vec4i> hierarchy, int mode, int method, Point offset = Point())
binImg:输入二值化图像
contours:轮廓点集
hierarchy:拓扑结构
mode:轮廓返回模式
RETR_TREE:返回所有轮廓和拓扑结构
RETR_EXTERNAL:只返回最外层轮廓
RETR_LIST:返回所有轮廓但不建立拓扑结构
method:轮廓发现方法,常用CHAIN_APPROX_SIMPLE
再新建一个矩阵来把提取出来的轮廓画出来
使用drawContours函数即可
drawContours(binImg, contours, contourIdx, color, thickness, lineType, hierarchy, maxlevel, offset)
代码
#include<opencv2/opencv.hpp>
#include<vector>
using namespace cv;
using namespace std;
vector<vector<Point> > pt;
int main(){
Mat img=imread("../2021-03-23 222039.jpg");
namedWindow("img",0);imshow("img",img);
cvtColor(img,img,COLOR_BGR2HSV);
GaussianBlur(img,img,Size(5,5),3);
Mat yellow,blue,red;
inRange(img,Scalar(20,130,0),Scalar(35,255,255),yellow);
inRange(img,Scalar(110,90,100),Scalar(130,255,255),blue);
inRange(img,Scalar(0,95,0),Scalar(10,255,255),red);
namedWindow("yellow",0);imshow("yellow",yellow);
namedWindow("blue",0);imshow("blue",blue);
namedWindow("red",0);imshow("red",red);
findContours(yellow,pt,RETR_EXTERNAL,CHAIN_APPROX_SIMPLE);
Mat con(img.size(),CV_8UC3);
drawContours(con,pt,-1,Scalar(255,255,255),5);
namedWindow("con",0);imshow("con",con);
waitKey(0);
return 0;
}
效果
标签:识别,img,yellow,OpenCV,Scalar,轮廓,red,255 来源: https://blog.csdn.net/C20180602_csq/article/details/120933095
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。