【发布时间】:2021-06-29 02:59:04
【问题描述】:
我有一张番茄种子的图片,图片中的种子数量是32。我正在尝试使用OpenCV 来计算这些种子。图像有一些噪音导致计数错误。
我的方法是计算圆心。一般的想法是阈值,然后从背景像素填充填充以填充背景(填充填充的工作原理类似于照片编辑应用程序中的油漆桶工具),这样您只能看到中心。
这是我的代码:
img = cv2.imread('tomato.jpg', 0)
dst = cv2.fastNlMeansDenoisingColored(img,None,10,10,7,21)
img = cv2.cvtColor(dst, cv2.COLOR_BGR2GRAY)
seed_pt = (25, 25)
fill_color = 0
mask = np.zeros_like(img)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
for th in range(60, 120):
prev_mask = mask.copy()
mask = cv2.threshold(img, th, 255, cv2.THRESH_BINARY)[1]
mask = cv2.floodFill(mask, None, seed_pt, fill_color)[1]
mask = cv2.bitwise_or(mask, prev_mask)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
n_centers = cv2.connectedComponents(mask)[0] - 1
print('There are %d cells in the image.'%n_centers)
输出是:
图像中有 34 个单元格。
原始计数为 32。
我该如何解决这个问题?
【问题讨论】:
-
这不是小型机器学习项目的一个很好的例子吗?不难,但在不同条件下(光线、噪点、变焦......)可能很稳健。
标签: python python-3.x opencv image-processing opencv3.0