当前位置:   article > 正文

Opencv学习笔记(一) 识别颜色块并且标定轮廓和中心_opencv抓取不同颜色的方块

opencv抓取不同颜色的方块

某男子学院初学小白,刚开始学习opencv一周,直接从做项目和参考代码开始

要做的就是识别这张图片中指定颜色的多边形并且标定轮廓和中心

在这里插入图片描述

思路如下:

1.提取颜色根据不同颜色所具有的不同的hsv范围。

2.将图片转化成hsv格式,通过hsv范围提取指定颜色图形转化成二值化图像

3.获得的二值化图像难免产生椒盐噪声,这时候我们可以运用循环中值滤波

形态学滤波去除核心函数morphologyEx

参考代码:

//针对二值化图像的处理降噪
 Mat kernel = getStructuringElement(MORPH_RECT, Size(8,8));   //创建结构元素大小为8*8
 medianBlur(pict2, pict2, 7);    //中值滤波 
 morphologyEx(pict2, pict2, MORPH_OPEN, kernel);  //开操作
 morphologyEx(pict2, pict2, MORPH_CLOSE, kernel);  //闭操作
 blur(pict2, pict2, Size(3, 3));            //均值滤波 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4.根据获得的二值化图像检测边缘(Canny函数),查找轮廓(findContours函数),然后可以根据公式计算轮廓矩和轮廓中心。

部分参考代码:

vector<Moments> mu(contours.size());    //计算轮廓矩  
 for (int i = 0; i < contours.size(); i++)
 {
  mu[i] = moments(contours[i], false);
 }
 vector<Point2f>  mc(contours.size());    //计算轮廓中心
 for (int i = 0; i < contours.size(); i++)
 {
  mc[i] = Point2f(mu[i].m10 / mu[i].m00, mu[i].m01 / mu[i].m00); 
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

5.绘制出轮廓和中心,我们可以使用到drawContourscircle函数。
参考代码:

//画轮廓及其质心并显示  
 for (int i = 0; i < contours.size(); i++)
 {
  drawContours(pict1, contours, i, Scalar(0, 255, 0), 12, 8, hierarchy, 0, Point());      //绘制轮廓
  circle(pict1, mc[i],15, Scalar(255, 255, 255), -1, 6, 0);      //画中心圆
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

效果如下:(以黄色为例)
在这里插入图片描述

希望对读者有所帮助,喜欢的话可以关注一下我的公众号,我会把学习笔记发在上面,大家可以一起共同学习!
Alt

Alt

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/369931
推荐阅读
相关标签
  

闽ICP备14008679号