Java OpenCV findContours:使其健壮

Java OpenCV findContours:使其健壮,java,opencv,contour,threshold,Java,Opencv,Contour,Threshold,如何使FindContentours强大到即使轮廓可能由于噪声数据和/或图像中的周边/梯度而未闭合,也能正常工作 对于第一个案例(未关闭),我遇到以下问题: 该算法在如下阈值图片上使用时运行良好: 但当我拍摄更近的照片时,没有闭合的轮廓,请看这里: 如何使其也适用于本案例?我想可能总是在我的图片的顶部和底部画一条水平线,然后总是“交叉”纸条(当纸条从太近的地方抓取时),使其成为一个完整的轮廓。但是当音符稍微旋转时,这可能不会太好,因为这样我就无法得到正确的轮廓,是吗!? 你有更好的主意吗?

如何使FindContentours强大到即使轮廓可能由于噪声数据和/或图像中的周边/梯度而未闭合,也能正常工作

对于第一个案例(未关闭),我遇到以下问题: 该算法在如下阈值图片上使用时运行良好:

但当我拍摄更近的照片时,没有闭合的轮廓,请看这里:

如何使其也适用于本案例?我想可能总是在我的图片的顶部和底部画一条水平线,然后总是“交叉”纸条(当纸条从太近的地方抓取时),使其成为一个完整的轮廓。但是当音符稍微旋转时,这可能不会太好,因为这样我就无法得到正确的轮廓,是吗!? 你有更好的主意吗?
提前多谢

这是一个简单的解决方案,可能会奏效

如果您知道哪些等高线点是间隙的开口(前面的伪代码):


问题是,我甚至没有得到一个轮廓,因为它不是封闭的,所以我不能实现你们的想法。我正在使用以下
Imgproc.findContours(I,等高线,new Mat(),Imgproc.RETR\u列表,Imgproc.CHAIN\u近似简单)
还是因为
Imgproc.CHAIN\u APPROX\u SIMPLE
我只得到一个有效闭合矩形的轮廓?我是否需要更改函数的调用,使其也能提供开放的轮廓!?是的,如果我记得正确,其中一个参数会使findContours输出开放的轮廓。可能我对该参数有误解,但检查解决该问题的这个问题,可能会有所帮助:不幸的是,否。我已经尝试过扩张/侵蚀,但它无法弥合在我的情况下可能出现的大间隙:(
Point pointGAP1;
Point pointGAP2;

if (pointGAP1.coordinate == iamgeBorder || pointGAP2.coordinate == iamgeBorder) {
    // add line from pointGAP1 to pointGAP2
}