我有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
1条答案
按热度按时间hiz5n14c1#
这里有一种方法。我不推荐使用Canny边缘。这是我建议在Python/OpenCV中使用的方法。
输入:
阈值图像:
形态学清洁图像:
生成的轮廓图像: