gpt4 book ai didi

python - 如何使用 Opencv Python 计算图像中有多少个白色 "balls"?

转载 作者:太空宇宙 更新时间:2023-11-03 22:36:19 25 4
gpt4 key购买 nike

我有这张图片,我想数一数有多少个白“球”

Imagem

我在下面尝试这段代码并得到这个结果

Result

import cv2
import numpy as np
img = cv2.imread('MASK.jpg', cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img,(700,700))
img = cv2.subtract(255, img)

detector = cv2.SimpleBlobDetector_create()

# Detect the blobs in the image
keypoints = detector.detect(img)
print(len(keypoints))


imgKeyPoints = cv2.drawKeypoints(img, keypoints, np.array([]), (0,0,255),
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

cv2.imshow("Keypoints", imgKeyPoints)
cv2.waitKey(0)

cv2.destroyAllWindows()

最佳答案

一些预处理来隔离 blob 成为对它们进行计数会有所帮助。这是一种方法:

  • 将图像转换为灰度
  • 大津的阈值
  • 变形开放以消除噪音
  • 找到轮廓并求和 blob

转为灰度后,我们用Otsu的阈值得到二值图像

接下来,我们使用 cv2.MORPH_ELLIPSE 内核进行 morph close 以去除噪声并更好地分离 blob

接下来我们找到轮廓并对 Blob 求和。请注意,变形关闭并没有“分离”所有连接的 Blob ,因此我们使用轮廓区域进行过滤。如果 blob 大于某个最小阈值,我们将 blob 计为 double 而不是 single。这是检测到的 Blob

结果

blobs: 325

import cv2
import numpy as np

image = cv2.imread('1.jpg')
mask = np.zeros(image.shape, dtype=np.uint8)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray,0,255,cv2.THRESH_OTSU + cv2.THRESH_BINARY)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7,7))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=5)

cnts = cv2.findContours(opening, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

blobs = 0
for c in cnts:
area = cv2.contourArea(c)
cv2.drawContours(mask, [c], -1, (36,255,12), -1)
if area > 13000:
blobs += 2
else:
blobs += 1

print('blobs:', blobs)

cv2.imshow('thresh', thresh)
cv2.imshow('opening', opening)
cv2.imshow('image', image)
cv2.imshow('mask', mask)
cv2.waitKey()

关于python - 如何使用 Opencv Python 计算图像中有多少个白色 "balls"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58125495/

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