官方给出求轮廓面积的函数是contourArea(),但是实际使用时发现该值并不是区域内亮点的像素值。contourArea是根据 Green formula计算得到的,具体计算上的差别可以参考这张图,实际7个像素,计算出来是2.5
白线经过的像素是1,其余(2,1)(3,3)为0
这让用惯halcon的我有点难以接受,于是寻思着怎么得到另一种面积(区域内亮像素的个数)。
搜索了一遍发现opencv3.x的connectedComponentsWithStats()可以实现这个功能,由于之前的功能都是在2.X版本下做的,一时不好切换,还是先自己搞一搞,使用opencv3.x的童鞋可以到这里了解~
方案一:
使用findContours找到轮廓之后,以其中一个轮廓点为起点,使用广度优先算法遍历搜索相邻的像素,统计亮点个数,具体实现如下~
const int offsetX[4] = { -1, 0, 1, 0 };
const int offsetY[4] = { 0, -1, 0, 1 };
int getContourArea(Mat &binImg, Point anchorPoint)
{
/*
取轮廓上的一点anchorPoint,计算与anchorPoint连通的所有点的个数
*/
CV_As