opencv 轮廓面积 java_opencv轮廓求面积

博客介绍了在opencv中,contourArea()函数计算的轮廓面积与实际亮点像素数的差异,并提出了使用广度优先搜索算法自定义计算亮点像素数的方法。作者分享了具体的代码实现,适用于寻找二值图像中特定轮廓内的亮点数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方给出求轮廓面积的函数是contourArea(),但是实际使用时发现该值并不是区域内亮点的像素值。contourArea是根据 Green formula计算得到的,具体计算上的差别可以参考这张图,实际7个像素,计算出来是2.5

0ac3133d51ad?tdsourcetag=s_pcqq_aiomsg

白线经过的像素是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_Assert(binImg.type() == CV_8UC1);

int w = binImg.size().width;

int h = binImg.size().height;

Mat flag = Mat::zeros(binIm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值