Python 使用opencv和Numpy从图像中检测平行四边形
我想使用python语言中的Opencv和numpy检测图像中的平行四边形。我尝试过轮廓检测,成功检测出矩形和正方形,但无法检测平行四边形和菱形,有人能帮我吗???我想做的是:Python 使用opencv和Numpy从图像中检测平行四边形,python,python-3.x,numpy,opencv,image-processing,Python,Python 3.x,Numpy,Opencv,Image Processing,我想使用python语言中的Opencv和numpy检测图像中的平行四边形。我尝试过轮廓检测,成功检测出矩形和正方形,但无法检测平行四边形和菱形,有人能帮我吗???我想做的是: 检测轮廓 在等高线上绘制直线(可能使用approxyPolyDP) 计算每个角的角度 确保相对的角是一致的(在一个边距内),相邻的角加起来是180 我以前写过一些代码来计算向量的3个点之间的角度。这可能会有帮助 def angle(pt1, pt2, pt0): # For A(x,y), B(x,y), C(x,y)
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))
我写了一些评论来帮助你。我还没有全面测试过它,所以要小心。我要做的是:
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))
我写了一些评论来帮助你。我还没有对它进行全面测试,所以要小心。找到所有的四边形物体。然后看边的角度。如果相对的边是平行的,但两条相对边的角度不是90的倍数,那么就有一个平行四边形(前提是平行四边形没有从显示的角度旋转)。其定义是:“平行四边形是一种有四条边的形状,彼此相对的边平行且长度相等,这意味着它们不相交。平行四边形的示例包括正方形、菱形和矩形。圆、三角形和梯形不是平行四边形。”平行四边形有三种特殊类型。菱形:所有边相等的平行四边形。矩形:所有角度都是直角且对角线相等的平行四边形。正方形:所有等边和所有角度等于90度的平行四边形。正方形的对角线也是相等的。平行四边形是具有两组平行边和两组全等边的四边形。平行四边形的对角是全等的;其连续角度是补充的;它的对角线彼此对分,并且它的对角线形成两个全等三角形找到所有4边的对象。然后看边的角度。如果相对的边是平行的,但两条相对边的角度不是90的倍数,那么就有一个平行四边形(前提是平行四边形没有从显示的角度旋转)。其定义是:“平行四边形是一种有四条边的形状,彼此相对的边平行且长度相等,这意味着它们不相交。平行四边形的示例包括正方形、菱形和矩形。圆、三角形和梯形不是平行四边形。”平行四边形有三种特殊类型。菱形:所有边相等的平行四边形。矩形:所有角度都是直角且对角线相等的平行四边形。正方形:所有等边和所有角度等于90度的平行四边形。正方形的对角线也是相等的。平行四边形是具有两组平行边和两组全等边的四边形。平行四边形的对角是全等的;其连续角度是补充的;它的对角线彼此对分,并且它的对角线形成两个全等三角形