我在opencv方法findContours()方面遇到了一些问题,因为它对我不起作用。我的代码适用于我的一些图片,但不适用于其他图片。我无法找到我的错误,但我也是蟒蛇新手。
所以这是我的第一张图片:
当我使用阈值和形态学操作时,它看起来像这样:
当我使用我的代码来检测轮廓时,它工作得很好。
但现在还有另一张图片:
使用相同的修改:
现在代码找不到任何轮廓,除了一个点,它位于我的几何体之外的某个地方。
有没有人对此有答案?
这是我正在使用的代码:
im=Image.open(filename)
imarray=np.array(im)
roi=imarray[150:600,200:800]
ret,thresh1=cv2.threshold(roi,125,255,cv2.THRESH_BINARY)
kernel=np.ones([5,5])
closing = cv2.morphologyEx(thresh1, cv2.MORPH_CLOSE, kernel)
opening = cv2.morphologyEx(closing, cv2.MORPH_OPEN, kernel)
_,contours,_ = cv2.findContours(opening, cv2.RETR_LIST,cv2.CHAIN_APPROX_NONE)
编辑
这是第二张图片的thresh1输出:
编辑2
不是"真的"解决了主要问题,但设法以某种方式使其工作:
我发现当我使用cv2.copyMakeBorder
向图片添加边框时,cv2.findContours
方法会设法找到这样的边框:
并找到第二个轮廓,如下所示:
所以有我正在寻找的形式,但我必须操纵数据以获得预期的结果。
这并没有真正解决一般问题,但它是一种以某种方式仍然获得我的结构的方式...
编辑3
我刚刚在代码中发现了一个错误。在轮廓数据的进一步使用中,修改数据以拟合样条。在这个过程中,我没有使用np.copy
制作我想要检索的轮廓的副本。在代码中实现之后,我得到了我想要的轮廓而不使用边框。所以cv2.findContours()
方法没有问题,只是我没有经验的python。因此,案件已经结案。