如何使用侵蚀来分离触摸物体的轮廓?

问题描述 投票:4回答:3

我遇到了这个问题:

我正在使用Python和OpenCV。我试图用腐蚀来分离触摸硬币的轮廓。我对图像进行了阈值处理,然后尝试应用侵蚀但没有发生任何事情。我已经阅读了文档,仍然不太了解getStruturingElement和erode是如何工作的。

  1. 我对图像进行了阈值处理。
  2. 在阈值图像上使用侵蚀。

但仍然没有。我在这里错了什么?

这是代码的一部分:

import cv2, numpy as np

#1.Reads Image
objectImage = cv2.imread('P1000713s.jpg')

#2.Converts to Gray level
cvtcolorImage = cv2.cvtColor(objectImage,cv2.cv.CV_RGB2GRAY)

#3.Thresholds
imgSplit = cv2.split(objectImage)
flag,b = cv2.threshold(imgSplit[2],0,255,cv2.THRESH_OTSU) 

#4.Erodes the Thresholded Image
element = cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3))
cv2.erode(b,element)

cv2.imshow('Eroded',b)
python opencv detection
3个回答
1
投票

查看您的图像,3x3交叉掩码可能始终保持在阈值区域内。而不是使用MORPH_CROSS,使用MORPH_ELLIPSE。

如果硬币在一次通话后仍然“触摸”,您可以随时进行多次侵蚀,但要注意这会对您的图像产生破坏性影响。


2
投票

我知道这是一个老问题,但我有类似的问题,并通过谷歌发现了这个问题。

据我所知,cv2.erode()不会更改源图像,而是返回应用了更改的新图像。

将包含侵蚀调用的行更改为:

b = cv2.erode(b,element)

当你调用cv2.imshow(......,b)时应该让你看到变化


1
投票

我知道这是一个非常古老的线索,但我认为我的答案可以帮助某人。我遇到了同样的问题。如果使用腐蚀来分离轮廓,则总会丢失形状属性信息。我按照这个链接:watershed segmentation OpenCV,其中使用分水岭分割来分离轮廓,结果非常准确。

© www.soinside.com 2019 - 2024. All rights reserved.