区分梯形与正方形和矩形

2024-06-28 15:54:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试开发一种算法来检测梯形形状。我试图找出一种方法来检测梯形的倒转角度,以区分正方形和梯形

我只是简单地在轮廓中循环,并尝试通过其他特征来区分梯形,因为我不确定如何检查梯形上的直线是否相反。有什么想法吗

下面是我正在跟踪的一个示例: enter image description here

这就是我到目前为止的想法:

for cnt in contourList:
        hull = cv2.convexHull(cnt)
        x, y, w, h = cv2.boundingRect(cnt)
        area = h * w * 1.0
        originalArea = cv2.contourArea(hull)

        #skip if not minimum area
        if(originalArea < 200 ):
            continue #too small!

        kMinTargetWidth = 20
        kMaxTargetWidth = 300
        kMinTargetHeight = 6
        kMaxTargetHeight = 60
        if(w < kMinTargetWidth or w  > kMaxTargetWidth):
            continue
        if(h < kMinTargetHeight or h > kMaxTargetHeight):
            continue


        #Ratio of width to height
        #ratio should be 1 or greater
        #target is 43 cm tall, 100 cm wide
        ratio = float(w) / float(h)
        if(ratio < 1.3):
            continue #skip

        kMinFullness = .50
        kMaxFullness = .95
        fullness = originalArea / area
        if(fullness < kMinFullness or fullness > kMaxFullness):
            continue

        if(cv2.isContourConvex(cnt) == True):
            continue

我希望这些梯形物体的凹面性质能够与矩形/正方形区分开来。我现在想我也应该检查一下侧面的角度

或者取凸包并找到角点。但我觉得OpenCV已经内置了类似的东西了?基本上我是在问我错过了什么


Tags: orifareacv2区分角度ratioskip
1条回答
网友
1楼 · 发布于 2024-06-28 15:54:40

如果您定义了contourListcv2,并确定了您导入的包,那么我的建议可能会更有针对性

简单地使用梯形,我建议使用梯形特性:一组相反的线是平行的,另一组不是。这需要知道四条直线的斜率。如果不直接知道这些坡度,但知道顶点,则可以计算四个坡度

本质上,使用梯形的定义是可靠的,并且有多种方法可以确定平行和非平行

相关问题 更多 >