我是opencv的新手,使用python并尝试获取图像中轮廓的形状。
只考虑常规形状,如方形,矩形,圆形和三角形,有没有办法仅使用numpy
和cv2
库获得轮廓形状?
此外,我想找到轮廓内的颜色。我该怎么办?
为了找到轮廓区域,有一个内置函数:cv2.contourArea(cnt)
。
是否还有“轮廓形状”和“轮廓内部颜色”的内置功能?
请帮忙!
注意:我正在考虑的图像包含多个常规形状。
答案 0 :(得分:1)
这种方法可能会更长,但现在它已经成为我的首选。为了找到轮廓形状,使用findcontours函数,它将给出点矢量作为输出(轮廓的边界点)。现在使用时刻找到轮廓的中心。
查找轮廓使用此功能 -
cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])
图像是精确的输出图像。
从瞬间计算中心,请参阅此链接 http://docs.opencv.org/trunk/dd/d49/tutorial_py_contour_features.html
计算轮廓中存储的每个点距离中心的距离 现在通过比较中心点的距离来分类形状
1)圈 - 所有轮廓点与中心的距离大致相等。
2) square,rectangl e-从中心找到最远的4个点,这些点将是顶点并且具有大致相同的距离。现在使用边长
区分正方形和矩形3) traingles - 对于不同类型的三角形,这可能很棘手,所以你可以在这里使用else条件,因为你只有4个形状
要查找颜色,请使用方形,矩形和三角形的顶点来创建蒙版。
由于您只有单色,因此您可以在中心周围做一个小补丁,并在那里获得RGB像素的平均值。 假设你的中心位于(100,100),它的圆心半径为20像素。创建大小为10 X 10的补丁,中心位于(100,100),并找到此补丁中R,G和B值的平均值。
表示红色R~255 G~0和B~0
表示绿色R~0 G~255和B~0
表示蓝色R~0 G~0和B~255
注意:opencv将值存储为BGR,而不是RGB
答案 1 :(得分:0)
为了找到特定轮廓的形状,我们可以在轮廓周围绘制一个有界矩形。 现在我们可以比较轮廓区域和有界矩形区域。 如果轮廓区域等于有界矩形区域的一半,则形状为三角形。 如果轮廓区域小于有界矩形区域但大于有界矩形区域的一半则为圆形。
注意:此方法仅限于常规三角形和圆形。这不适用于六边形,七边形等多边形。