gpt4 book ai didi

python - 如何知道在findContour之后是否需要反转阈值类型

转载 作者:行者123 更新时间:2023-12-02 17:04:32 25 4
gpt4 key购买 nike

我正在与OpenCV进行手检测。但是在尝试绘制脱粒图像的轮廓时,我很挣扎。 findContour将始终尝试找到白色区域作为轮廓。

因此基本上可以在大多数情况下使用,但有时我的脱粒图像如下所示:
_, threshed = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY|cv2.THRESH_OTSU) Base
enter image description here

因此,要使其正常工作,我只需要更改阈值类型cv2.THRESH_BINARY_INV即可。
_, threshed = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV|cv2.THRESH_OTSU)
Reverse
DrawContour

而且效果很好。

我的问题是如何确定何时需要反转阈值?我是否需要始终在两个脱粒图像上找到轮廓,然后比较结果(在这种情况下如何?)?或者有一种方法可以使您知道是否不会完全忽略轮廓。

编辑:有一种方法可以100%确定轮廓看起来像一只手吗?

编辑2 :所以我忘了提一下,我正在尝试使用此method检测指尖和缺陷,因此我需要缺陷,在第一个脱粒图像中我找不到它们,因为它反转了。参见第一轮廓image上的蓝点。

谢谢。

最佳答案

您可以编写一种实用程序方法来检测边界上最主要的颜色,然后确定逻辑,就好像您要反转图像一样,因此流程如下所示:

  • 使用OSTU二值化方法。
  • 将阈值图像传递给实用程序方法get_most_dominant_border_color并获得主色。
  • 如果边框颜色是WHITE,那么您应该使用cv2.bitwise_not反转图像,否则只能保持这种方式。
  • get_most_dominant_border_color可以定义为:
    from collections import Counter

    def get_most_dominant_border_color(img):
    # Get the top row
    row_1 = img[0, :]
    # Get the left-most column
    col_1 = img[:, 0]
    # Get the bottom row
    row_2 = img[-1, :]
    # Get the right-most column
    col_2 = img[:, -1]

    combined_li = row_1.tolist() + row_2.tolist() + col_1.tolist() + col_2.tolist()

    color_counter = Counter(combined_li)

    return max(color_counter.keys(), key=lambda x:color_counter.values())

    关于python - 如何知道在findContour之后是否需要反转阈值类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56967542/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com