今天遇到一个很头疼的问题,使用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)
刚才试了一下,是可以的,这样确实可以返回比较真实的面积,但是原理我不知道,说是直觉也好,胡扯也罢,希望有大神能评论告诉我。