首页 文章

检测内部轮廓和颜色的形状

提问于
浏览
1

我是使用python的opencv的新手,并尝试在图像中获得轮廓的形状 . 只考虑常规形状,如方形,矩形,圆形和三角形,有没有办法只使用 numpycv2 库获得轮廓形状?

我也想找到轮廓内的颜色 . 我该怎么做?

为了找到轮廓区域,有一个内置函数: cv2.contourArea(cnt) . 是否还有"contour shape"和"color inside contour"的内置函数?请帮忙!

注意:我正在考虑的图像包含多个常规形状 .

2 回答

  • 1

    这种方法可能会更长,但现在它已经成为我的首要任务 . 为了找到轮廓形状,使用findcontours函数,它将给出点矢量作为输出(轮廓的边界点) . 现在使用瞬间找到轮廓的中心 .

    寻找轮廓使用此功能 -

    cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])
    

    图像是精确的输出图像 .

    从瞬间计算中心,请参阅此链接http://docs.opencv.org/trunk/dd/d49/tutorial_py_contour_features.html

    计算从中心存储在轮廓中的每个点的距离现在通过比较点与中心的距离来分类形状

    1) circle - 所有轮廓点与中心的距离大致相等 .

    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

  • 0

    为了找到特定轮廓的形状,我们可以在轮廓周围绘制一个有界矩形 . 现在我们可以比较轮廓区域和有界矩形区域 . 如果轮廓区域等于有界矩形区域的一半,则形状为三角形 . 如果轮廓区域小于有界矩形区域但是大于有界矩形区域的一半则为圆形 .

    注意:此方法仅限于常规三角形和圆形 . 这不适用于六边形,七边形等多边形 .

相关问题