本文将通过对一幅米粒图像的处理,讨论在OpenCV中相关函数对Blob的检测和计数问题。
OpenCV实例中的代码说明:
1) 关于SimpleBlobDetector的说明:
其目的是对Blob进行侦测,Blob就是在图片中连在一起的一团像素集合,该集合中的像素必须拥有共同的特性(比如灰度值等)。
OpenCV提供了非常便捷的方法去侦测Blob,并可以基于特定的特征(如颜色、尺寸、形状等)对这些Blob进行筛选,以避免早期的Blob侦测算法中的过度提取。
具体原理内容在:https://www.learnopencv.com/blob-detection-using-opencv-python-c/
2) getStructuringElement()函数:
该函数的第1个参数表示内核的形状:
矩形(MORPH_RECT);交叉形(MORPH_CORSS);椭圆形(MORPH_ELLIPSE);
第2和第3个参数分别是内核的尺寸以及锚点的位置,锚点的位置有默认的(-1, -1),即中心点。
一般在调用腐蚀(erode)以及膨胀(dilate)函数之前,先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。
3) findContours()函数:
函数原型:findContours(InputOutputArray image,OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point());
Ø image,单通道图像矩阵,可以是灰度图,但更常用的是二值图像,一般是经过Canny、拉普拉斯等边缘检测算子处理过的二值图像。
Ø contours,定义为“vector<vector&