一种应对cv2.contourArea面积计算不准确问题的解决方法

今天遇到一个很头疼的问题,使用cv2.findContours找到所有的轮廓之后,我想提取出包含面积最大的轮廓,于是很自然的想用cv2.contourArea算一下,但是最终得到的结果跟实际差别相当大,最大轮廓面积的计算成很小的一个值,而其中一个不太起眼的区域被计算得倒最大的面积,扯淡。

这个问题在网上没有很好的解决方法,刚才不知道怎么想的,就想,cv2.findContours得到的是详细的轮廓点,那我能不能用一个外接矩形框起这个轮廓,直接用外接矩形的四个点去当作轮廓去计算面积呢。

def contourArea(cnt): #传入一个轮廓
    rect = cv2.minAreaRect(cnt)  #最小外接矩形
    box = cv2.boxPoints(rect)
    box = np.int0(box)
    return cv2.contourArea(box)

刚才试了一下,是可以的,这样确实可以返回比较真实的面积,但是原理我不知道,说是直觉也好,胡扯也罢,希望有大神能评论告诉我。

你可能感兴趣的:(python,opencv)