已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。
2天前关闭。
Improve this question
我有一个图像,图像上有多条垂直线。我使用cv.findContours
成功地找到了所有的轮廓。在其他情况下,我使用cv.contourArea
选择了最大的轮廓,但在这种情况下,面积对我没有帮助。我如何找到最右边的轮廓和最左边的轮廓?
这是我用来找到两个最大轮廓的代码。有没有办法操纵这段代码来找到最右边和最左边的轮廓?
_, contours_red, _ = cv.findContours(mask_red1, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
if len(contours_red) >= 2:
contours_red = sorted(contours_red, key=cv.contourArea, reverse=True)[0:2]
我看到另一个论坛提到使用cv.moments()
,但是查看cv.moments()
的文档,我认为这不起作用。
我考虑使用for循环遍历每个轮廓,找到每个轮廓的平均列像素坐标,然后比较每个坐标,直到找到最右边和最左边的坐标,但我希望有一种更简单、更快的方法来完成这一任务。
1条答案
按热度按时间vlf7wbxs1#
a)如果要比较轮廓的质心,可以使用
np.average
,如下所示:这些将是
contours_red
中最左和最右轮廓的索引。B)如果您需要包含最左侧和最右侧顶点的轮廓,您可以分别使用
np.min
和np.max
:c)如果您仔细遵循以下文档,您也可以使用
moments
来查找质心:https://docs.opencv.org/3.4/dd/d49/tutorial_py_contour_features.html