python opencv -按位置过滤轮廓

w51jfk4q  于 2022-12-13  发布在  Python
关注(0)|答案(2)|浏览(205)

我使用这段代码来查找一些blob,并选择最大的一个。

contours, hierarchy = cv2.findContours(th1, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 
if len(contours) != 0:
    c = max(contours, key=cv2.contourArea)

现在,我需要修改这段代码,使其返回帧中间的轮廓(其边界框覆盖图像的中心像素)。
我不知道如何做这件事,除了获得所有轮廓的边界框

xbox, ybox, wbox, hbox = cv2.boundingRect(cont)

然后检查x和y是否小于中心e,x+w和y+h是否大于中心e。这看起来不像是一个有效的方法坚韧因为可能有多达500个小控件。

7uzetpgm

7uzetpgm1#

OpenCV中有一个函数,它将检查给定的点是在轮廓内部(返回1)、边界上(返回0)还是外部(返回-1)。
cv2.point多边形测试()

qmelpv7a

qmelpv7a2#

我想推荐这种方法,也许有一种更直接的方法。我在这里写代码,但给出了一个可能的算法:

  • 在轮廓上迭代,并使用二进制矩阵中的掩码绘制每个单个轮廓(黑白和填充)
  • 检查中心像素(图像宽度/2,图像高度/2)是否等于1

应该可以

相关问题