OpenCV中contourArea轮廓面积算法

for( int i = 0; i < npoints; i++ )  
    {  
        将轮廓点转换为浮点型  
        Point2f p = is_float ? ptsf[i] : Point2f((float)ptsi[i].x, (float)ptsi[i].y);
        a00 += (double)prev.x * p.y - (double)prev.y * p.x;//向量叉乘  
        prev = p;  
    }  
    a00 *= 0.5;  
    if( !oriented )  
        a00 = fabs(a00); 

其中(double)prev.x * p.y - (double)prev.y * p.x;不是很好理解.

可以看作(prev,x,prev.y)和(x,y)两个向量,那么上式就可以看作两向量的叉乘,含义就是这两个点和原点围成的面积的2倍。

举例说明哈:

(1)轮廓点为:A(1,1)、B(1,2)、C(2,2)、D(2,1)

(2)首先选取A和B两点,根据上面解释,根据向量OA和OB的叉乘可以求出三角形OAB面积(带方向),注意:向量叉乘是有方向的(右手准则)!叉乘的模是平行四边形面积!

(3)再选取B和C两点,可计算OBC的面积(带方向);

(4)三角形OAB和OBC的带方向的面积差就是三角形ABC的面积;

(5)后续计算同理;

(6)不要忘了最后还要乘以0.5哈!

计算过程:

 

①(A,B):1*2-1*1=1;

②(B,C):1*2-2*2=-2;

③(C,D):2*1-2*2=-2;

④(D,A):2*1-1*1=1;

⑤ S=(1-2-2+1)/2;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值