Python Opencv等高线区域返回错误结果

Python Opencv等高线区域返回错误结果,python,opencv,opencv-python,opencv-contour,Python,Opencv,Opencv Python,Opencv Contour,我目前正在从事一个opencv项目,该项目确定轮廓区域。 我试图设置一个合适的阈值,并在其上应用cv2.findContours。 然而,我发现当轮廓与图像的边界相交时,使用cv2.contourArea会大大低估该区域。 如何解决这个问题? (请检查随附的图像,这些图像显示了样本图像上的错误结果) 谢谢你的建议。我编辑了标题,还试图写下所需的细节,并将相应的结果附在图片上。你认为这张图片的结果会是什么?正如你所看到的,在第二张图片中,最大轮廓的区域被确定为71,大大低于正确的值(即40000

我目前正在从事一个opencv项目,该项目确定轮廓区域。 我试图设置一个合适的阈值,并在其上应用
cv2.findContours
。 然而,我发现当轮廓与图像的边界相交时,使用
cv2.contourArea
会大大低估该区域。 如何解决这个问题? (请检查随附的图像,这些图像显示了样本图像上的错误结果)


谢谢你的建议。我编辑了标题,还试图写下所需的细节,并将相应的结果附在图片上。你认为这张图片的结果会是什么?正如你所看到的,在第二张图片中,最大轮廓的区域被确定为71,大大低于正确的值(即40000多个)。只需查看左侧的小轮廓,其轮廓面积被确定为193。在获得轮廓之前,您可能需要用黑色填充图像。谢谢您的建议。我编辑了标题,还试图写下所需的细节,并将相应的结果附在图片上。你认为这张图片的结果会是什么?正如你所看到的,在第二张图片中,最大轮廓的区域被确定为71,大大低于正确的值(即40000多个)。只需看看左边的小轮廓,轮廓区域被确定为193。也许你需要在获得轮廓之前用黑色填充图像。
import cv2
import numpy as np

def midpoint(ptA, ptB):
    return ((ptA[0] + ptB[0]) * 0.5, (ptA[1] + ptB[1]) * 0.5)

Input = cv2.imread("Thresh.png")
Thresh = cv2.cvtColor(Input,cv2.COLOR_BGR2GRAY)

contours, hierarchy = cv2.findContours(Thresh,  cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
minArea = 0
for cnt in contours:
    area = cv2.contourArea(cnt)
    print(area)
    if (area > minArea) :
        x,y,w,h = cv2.boundingRect(cnt)
        rect = cv2.minAreaRect(cnt)
        box = cv2.boxPoints(rect)
        box = np.int0(box)
        Input = cv2.drawContours(Input,[box],0,(255,0,0),2)
        (tl, tr, br, bl) = box
        (tltrX, tltrY) = midpoint(tl, tr)
        cv2.putText(Input, "{:1f}".format(area),
        (int(tltrX), int(tltrY)), cv2.FONT_HERSHEY_SIMPLEX,
        0.65, (0, 255, 0), 2)
        cv2.imshow('Input',Input)
cv2.waitKey(0)
cv2.destroyAllWindows()