我想使用python语言中的Opencv和numpy在图像中检测平行四边形。我已经从轮廓检测中尝试过并成功检测到矩形和正方形,但无法检测到平行四边形和菱形等形状,有人可以帮我吗?
我要做的是:
我之前已经编写了一些代码来计算向量3点之间的角度。这可能会有所帮助。
def angle(pt1, pt2, pt0):
# For A(x,y), B(x,y), C(x,y)
# vectorAB = B-A = ((Bx-Ax)-(By-Ay))
# vectorBC = C-B = ((Cx-Bx)-(Cy-By))
# dx1 = pt1x-coordinate - pt0x-coordinate
dx1 = pt1[0][0] - pt0[0][0]
dy1 = pt1[0][1] - pt0[0][1]
# vectorAB
d1 = np.array([dx1, dy1])
# vectorBC
dx2 = pt2[0][0] - pt0[0][0]
dy2 = pt2[0][1] - pt0[0][1]
d2 = np.array([dx2, dy2])
# dot product of d1 en d2
# dotPrd1d2= d2(x)*d1(x)+d2(y)*d1(y)
dotPr = np.dot(d1, d2)
# ||AB|| = sqrt(math.pow(vectorABx, 2) + math.pow(VectorABy,2))
# ||BC|| = sqrt(math.pow(vectorBCx, 2) + math.pow(vectorBCy,2))
lengthOfd1 = math.sqrt(math.pow(dx1,2) + math.pow(dy1, 2))
lengthOfd2 = math.sqrt(math.pow(dx2, 2) + math.pow(dy2, 2))
# returns the angle of the vector by arc cos alpha
return np.arccos(dotPr/(lengthOfd1*lengthOfd2))
我已经写了一些评论以提供帮助。我尚未对其进行广泛的测试,因此请小心。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句