我遇到了这个问题:
我正在使用Python和OpenCV。我试图用腐蚀来分离触摸硬币的轮廓。我对图像进行了阈值处理,然后尝试应用侵蚀但没有发生任何事情。我已经阅读了文档,仍然不太了解getStruturingElement
和erode是如何工作的。
但仍然没有。我在这里错了什么?
这是代码的一部分:
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)
查看您的图像,3x3交叉掩码可能始终保持在阈值区域内。而不是使用MORPH_CROSS,使用MORPH_ELLIPSE。
如果硬币在一次通话后仍然“触摸”,您可以随时进行多次侵蚀,但要注意这会对您的图像产生破坏性影响。
我知道这是一个老问题,但我有类似的问题,并通过谷歌发现了这个问题。
据我所知,cv2.erode()不会更改源图像,而是返回应用了更改的新图像。
将包含侵蚀调用的行更改为:
b = cv2.erode(b,element)
当你调用cv2.imshow(......,b)时应该让你看到变化
我知道这是一个非常古老的线索,但我认为我的答案可以帮助某人。我遇到了同样的问题。如果使用腐蚀来分离轮廓,则总会丢失形状属性信息。我按照这个链接:watershed segmentation OpenCV,其中使用分水岭分割来分离轮廓,结果非常准确。