【发布时间】:2023-01-12 05:49:10
【问题描述】:
我有一张有 9 个泡泡的图片。我的任务是计算它们并输出图像中气泡的数量。首先,我尝试为图像添加高斯模糊,然后我使用 Canny 边缘检测,最后它应该绘制检测到的气泡的轮廓。但是,仍然缺少一个气泡,我真的不知道为什么。我该如何解决这个问题? 这是我的代码:
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('objects.jpg', cv2.IMREAD_GRAYSCALE)
img_blur = cv2.GaussianBlur(img, (3, 3), 0)
plt.imshow(img_blur, cmap='gray')
# Canny Edge Detection
edge = cv2.Canny(img_blur, 0, 250)
fig, ax = plt.subplots(1, 2, figsize=(18, 6))
ax[0].imshow(img, cmap='gray')
ax[1].imshow(edge, cmap='gray')
(cnt, hierarchy) = cv2.findContours(
edge.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cv2.drawContours(rgb, cnt, -1, (0, 255, 0), 2)
plt.imshow(rgb)
print("number of objects in the image is: ", len(cnt))
这是我的输入图像:https://imgur.com/a/wKNB5jF
以及在绘制轮廓后缺少一个气泡的最终输出:https://imgur.com/a/dyAnKKV
【问题讨论】:
-
不要使用 Canny 边缘检测。背景颜色的阈值(使用 cv2.inRange())并反转,使彩色对象在黑色背景上呈白色。然后使用形态学来关闭并去除小斑点。然后获取轮廓并计算轮廓。