如何统计一张黑色背景图像中的白色区域数量?
我是一名学习python的本科学生,在设计小组作业时遇到了一些问题,本组的作业是要记录一个培养皿内的菌落数量,目前代码如下
import cv2import 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