【问题标题】:OpenCV Blob detector using Laplacian使用拉普拉斯算子的 OpenCV Blob 检测器
【发布时间】:2017-01-18 08:05:42
【问题描述】:

我有一张来自显微镜的图像,需要对其进行分析(隔离斑点)。我一直在尝试很多方法来对图像进行阈值和过滤,这给了我很好的结果,现在我正在努力获得最好的结果。

我一直在阅读有关拉普拉斯算子并应用高斯拉帕斯算子来找到零交叉点,即图像边缘。

我已经为我的主题图像实现了this 代码,我可以查看拉普拉斯结果,但我不知道如何“使用”它,因为它在其他“空间”(深度)中

这是主题图像和拉普拉斯结果。如何从拉普拉斯图像中获取 blob?

【问题讨论】:

  • 没试过但可能是(高斯+)分水岭?
  • 我尝试过分水岭,但我的分割效果很差

标签: c++ opencv


【解决方案1】:

既然你已经对输入图像做了拉普拉斯,接下来你需要做的是:

  • 对图像设置阈值以获得二值图像。

  • 在二值图像中查找轮廓(斑点)。

示例代码可能如下所示:

laplacian_img_RGB = cv2.cvtColor(laplacian_img, cv2.COLOR_GRAY2BGR)

ret, thresh = cv2.threshold(laplacian_img, 140, 255, cv2.THRESH_BINARY)

img, contours, hierarchy = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

# For debugging Purposes
for i in xrange(len(contours)):
    laplacian_img_RGB = cv2.drawContours(laplacian_img_RGB, contours, i, [0, 255, 0], 3)

cv2.imwrite("./debug.png", laplacian_img_RGB)

【讨论】:

  • 问题是 Laplacina 结果 (CV_64F) 的像素深度,您建议的所有步骤都需要 CV_8 深度图像,这就是我面临的问题。但我使用 convertScaleAbs 解决了它
猜你喜欢
  • 2012-04-25
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
相关资源
最近更新 更多