6

我遇到了这个问题:

http://img38.imageshack.us/img38/5856/questao.png

我正在使用 Python 和 OpenCV。我正在尝试使用腐蚀分离接触硬币的轮廓。我对图像进行了阈值处理,然后尝试应用侵蚀,但没有任何反应。我已经阅读了文档,但仍然不太了解getStruturingElementand 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.COLOR_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)
4

3 回答 3

3

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

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

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

b = cv2.erode(b,element)

调用 cv2.imshow(...,b) 时应该让您看到更改

于 2014-04-30T16:25:37.343 回答
2

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

如果在一次调用后硬币仍然“接触”,您总是可以运行多次调用来腐蚀,但要注意这将对您的形象产生破坏性影响。

于 2012-11-17T23:31:52.483 回答
2

我知道这是一个非常古老的线程,但我认为我的回答可以帮助某人。我面临着同样的问题。如果使用 erode 来分离轮廓,总会丢失形状属性信息。我点击了这个链接:分水岭分割OpenCV,其中分水岭分割用于分离轮廓,结果非常准确。

于 2019-02-18T10:09:40.063 回答