365 字
2 分钟
OpenCV contourArea计算面积偏小原理详解

最近捣鼓OpenCV想来自动化验证滑块验证码,在计算滑块和背景缺口面积的时候,发现使用自带的contourArea函数计算的面积偏小,比实际面积小很多。

用画图工具简单比划看了一下,滑块的尺寸是70*70,背景阴影缺口的尺寸是59*60,滑块本身带有一圈10像素的圆角,所以计算出来的面积偏小。这是很好理解的,但是使用contourArea函数计算的面积只有2158,比实际要小的多。

背景 滑块

原理#

contourArea计算的本身是不规则图形的面积,而不是矩形的面积。所以计算出来的面积会偏小。它本身是使用格林公式计算的,格林公式使用的条件是正向、连续、无交叉,刚好满足图形里面轮廓的特点,所以可以二重积分和格林公式计算出不规则图形的面积。

green

但是并不是这样就会使得计算出来的面积小这么多。

contourArea函数取的像素点是连通域中心点,比如一个4*4的连通域,使用该函数来计算面积时,他会取到边缘的中心点而不是边缘的像素点,如图。 contourArea

这会使得面积从16像素点减少到9像素点,所以计算出来的面积会产生第二次偏小。

OpenCV contourArea计算面积偏小原理详解
https://blog.kimbleex.top/posts/2026-01-05-opencv-contourarea/
作者
Kimbleex
发布于
2026-01-05
许可协议
CC BY-NC-SA 4.0