如何统计一张黑色背景图像中的白色区域数量?

我是一名学习python的本科学生,在设计小组作业时遇到了一些问题,本组的作业是要记录一个培养皿内的菌落数量,目前代码如下

import cv2

import numpy as np

from PIL import Image

from glob import glob

import os

#二值化并获取图像内培养皿的圆形区域

original_img = cv2.imread(r'1.jpeg')

gray_img = cv2.cvtColor(original_img,cv2.COLOR_BGR2GRAY)

_, binary = cv2.threshold(gray_img,0,255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)

contours, _ = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

for cont in contours:

(x, y), radius = cv2.minEnclosingCircle(cont)

if radius>200:#掩膜

ming=cv2.circle(original_img,(int(x),int(y)),int(radius-50), (0, 0, 255), 2)

roi = np.zeros(original_img.shape[:2], np.uint8)

roi = cv2.circle(roi,(int(x),int(y)), int(radius-50), 255, cv2.FILLED)

mask = np.ones_like(original_img) * 255

mask = cv2.bitwise_and(mask, original_img, mask=roi) + cv2.bitwise_and(mask, mask, mask=roi)

kernel1 = np.ones((5,5), np.uint8)

kernel2 = np.ones((3,3), np.uint8)#设置腐蚀和膨胀系数

gray_img = cv2.cvtColor(mask,cv2.COLOR_RGB2GRAY)

ret, th1 = cv2.threshold(gray_img, 150, 255, cv2.THRESH_BINARY)

erosion = cv2.erode(th1, kernel1, iterations=1)

dilation = cv2.dilate(erosion, kernel2, iterations=1)#腐蚀和膨胀去噪点

cv2.imshow('erosion', erosion)

cv2.imshow('dilation',dilation)

cv2.waitKey(0)

原图及经过以上操作获得的图像如下:
如何统计一张黑色背景图像中的白色区域数量?如何统计一张黑色背景图像中的白色区域数量?

现在需要对图中的白点进行计数,连成片的按一个点计算,我的思路是通过遍历图中的像素,找到图像中的白色像素点,并寻找其周围的其他白色点直到找不到为止,则计数+1
但我感觉这种方法比较繁琐,请问有没有更好的解决方式?


回答:

大概看了一下,将图片二值化,再使用cv2.connectedComponentsWithStats即可。

如何统计一张黑色背景图像中的白色区域数量?

代码如下:

_, bin_img = cv2.threshold(dilation, 0, 1, cv2.THRESH_BINARY)

# 搜索图像中的连通区域

ret, labels, stats, centroid = cv2.connectedComponentsWithStats(bin_img, connectivity=4)

idx = 1

for stat in stats:

if (stat[2] - stat[0]) > bin_img.shape[0] / 2:

continue

cv2.rectangle(original_img_cbk, (stat[0], stat[1]), (stat[0] + stat[2], stat[1] + stat[3]), (0, 0, 255), 2)

cv2.putText(original_img_cbk, str(idx), (stat[0], stat[1] + 25), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255, 25, 25), 2)

idx += 1

plt.imshow(original_img_cbk)

plt.show()


回答:

参考leetcode题目岛屿的数量:https://leetcode.cn/problems/...


回答:

OpenCV斑点检测不知道是不是你要找的东西
http://www.manongjc.com/detail/54-dhmiqsqqacuovko.html

以上是 如何统计一张黑色背景图像中的白色区域数量? 的全部内容, 来源链接: utcz.com/p/938684.html

回到顶部