【问题标题】:How to count number of dots in an image using python and Opencv?如何使用 python 和 Opencv 计算图像中的点数?
【发布时间】:2018-12-07 10:49:52
【问题描述】:

我想计算图像中的点数。 图像看起来像

我提到了这个 SOF 链接count colored dots in image 但这是针对彩色链接的,所以这里的任何人都可以指导我如何处理这个问题并从白背中计算黑点。

【问题讨论】:

  • 我向您推荐first answer 来解决您发布的问题。霍夫变换适用于二值图像。
  • 为了帮助您入门,有一个类似主题的 Matlab 教程。只需查看那里使用的功能,并在 OpenCV、Pillow 等中找到它们的等价物。 de.mathworks.com/help/images/…
  • 您对第 3 方库函数或基本代码/方法本身感兴趣吗?
  • 第三方代码库函数
  • 如果图像总是这样并且您想要一个简短的快速答案,我会说使用 OpenCV 中的 connectedComponents 它可能会处理更大的点,并返回标签的数量(背景计数作为标签)。唯一的事情是,据我所知,黑色是这个函数的背景......所以你必须先反转图像...... bitwise_not 应该很快就能解决问题。还要确保它是二值图像(OpenCV 中的 CV_8U,黑色为 0,白色为 255)

标签: python opencv


【解决方案1】:
  1. thredhold 使用 THRESH_BINARY_INV 标志,更改为 black-background-white-foreground。
  2. findContours,按面积过滤轮廓(由contourArea计算)
  3. 你懂的

import cv2
gray = cv2.imread("dots.jpg", 0)

## threshold
th, threshed = cv2.threshold(gray, 100, 255,cv2.THRESH_BINARY_INV|cv2.THRESH_OTSU)

## findcontours
cnts = cv2.findContours(threshed, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[-2]


## filter by area
s1= 3
s2 = 20
xcnts = []
for cnt in cnts:
    if s1<cv2.contourArea(cnt) <s2:
        xcnts.append(cnt)

print("Dots number: {}".format(len(xcnts)))
#Dots number: 23

【讨论】:

    【解决方案2】:

    您指向的答案是将彩色图像转换为灰度,因此您应该将HoughCircles() 应用于您的图像并找出结果数组的长度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      • 2022-11-30
      相关资源
      最近更新 更多