【问题标题】:How to find the largest white pixel region from a binary image如何从二值图像中找到最大的白色像素区域
【发布时间】:2016-02-18 08:52:32
【问题描述】:

我一直在研究 opencv python 上的二进制图像。我需要获得最大的区域。我使用了以下代码,但没有得到想要的输出。

edged = cv2.Canny(im_bw, 35, 125)
(cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
c = max(cnts, key = cv2.contourArea)

【问题讨论】:

  • 能否提供一些例子?
  • 你想要的输出是什么意思?它给你一个不是最大的部分?
  • 假设我想从二值图像中提取大象,假设大象是最大的白色像素区域。
  • @Kaira ,抱歉迟到了,我建议使用 SIFT 和 SURF 算法正在使用的 DoG(高斯差)。您也可以使用流域。

标签: python python-2.7 opencv


【解决方案1】:

您不需要使用精明的输出来执行此操作。只需直接在im_bw 上执行findContours,您应该会得到想要的结果。如果仍然不是您想要的,请尝试使用不同的阈值(假设您的原始图像本身不是 BW)

(_, im_bw) = threshold(frame, 100, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
(cnts, _) = cv2.findContours(im_bw.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
c = max(cnts, key = cv2.contourArea)

【讨论】:

  • 谢谢你 Thesane,但它没有用,你能解释一下如何显示“c”,我在那部分出错,image = cv2.drawContours(im_bw, [cnt], 0, (0,255,0), 3) cv2.imshow('IMG',image)
  • drawContours 不会返回图像(查看文档),它会将其绘制在im_dw 上。为了显示它使用cv2.imshow('IMG', im_bw)。还要绘制最大的轮廓c 使用cv2.drawContours(im_bw, [c], 0, (0,255,0), 3)
【解决方案2】:

你真的没有解释你在寻找什么,“最大区域”?您发布的代码将为您提供找到的最大轮廓,但您需要了解什么是 OpenCV 轮廓 here。现在根据您的图像,您可能会有很多噪音,这使得 OpenCV 不会给您提供您期望的“区域”,因此您需要减少噪音。在应用 Canny 或阈值之前,您可以将BLUR 应用于图像EROTION and/or DILATION

算法应该是这样的:

  • 获取框架/图像
  • 灰度化
  • 应用模糊/侵蚀/扩张以减少噪点
  • 应用 Canny 或阈值
  • 寻找轮廓
  • 获取最大的
  • 做你需要的事

Here 你会在 Python 中找到很好的文档。

【讨论】:

    【解决方案3】:

    我正在使用python的scikit-image包,它测量岛屿的面积并选择最大的面积如下-

    import skimage
    from skimage import measure
    
    labels_mask = measure.label(input_mask)                       
    regions = measure.regionprops(labels_mask)
    regions.sort(key=lambda x: x.area, reverse=True)
    if len(regions) > 1:
        for rg in regions[1:]:
            labels_mask[rg.coords[:,0], rg.coords[:,1]] = 0
    labels_mask[labels_mask!=0] = 1
    mask = labels_mask
    

    输入图像-

    输出图像-

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      • 2016-10-01
      相关资源
      最近更新 更多