我正在尝试开发一种算法来检测梯形形状。我试图找出一种方法来检测梯形的倒转角度,以区分正方形和梯形
我只是简单地在轮廓中循环,并尝试通过其他特征来区分梯形,因为我不确定如何检查梯形上的直线是否相反。有什么想法吗
这就是我到目前为止的想法:
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已经内置了类似的东西了?基本上我是在问我错过了什么
如果您定义了
contourList
和cv2
,并确定了您导入的包,那么我的建议可能会更有针对性简单地使用梯形,我建议使用梯形特性:一组相反的线是平行的,另一组不是。这需要知道四条直线的斜率。如果不直接知道这些坡度,但知道顶点,则可以计算四个坡度
本质上,使用梯形的定义是可靠的,并且有多种方法可以确定平行和非平行
相关问题 更多 >
编程相关推荐