android上OpenCV绘制轮廓的奇怪问题

android上OpenCV绘制轮廓的奇怪问题,android,opencv,draw,Android,Opencv,Draw,我在android上偶然发现了OpenCV绘图轮廓的一个奇怪问题。 有时,(无明显图案)函数drawContours会产生以下结果: 而它显然应该只产生白色的部分 把它放在上下文中: 我使用canny算法检测边缘,然后使用 Imgproc.findContours(dil, contours, dummy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE); 然后,我选择几个符合某些要求的轮廓,并将它们添加到列表中: List<MatOfP

我在android上偶然发现了OpenCV绘图轮廓的一个奇怪问题。 有时,(无明显图案)函数drawContours会产生以下结果:

而它显然应该只产生白色的部分

把它放在上下文中: 我使用canny算法检测边缘,然后使用

Imgproc.findContours(dil, contours, dummy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
然后,我选择几个符合某些要求的轮廓,并将它们添加到列表中:

List<MatOfPoint> goodContours = new ArrayList<MatOfPoint>();
大多数时候,我得到了我所期望的:纯黑色背景上的白色补丁,但有时我得到了上面的补丁。我在这里完全不知所措。我怀疑可能有一些内存泄漏,但我尝试在所有Mat不再使用后立即释放它们(我也尝试在函数结束时释放它们,但没有效果),但我无法确定问题的根源

有没有人有过类似的问题

我第一次在OpenCV 2.4.0上发现了这一点,但它在2.4.3上保持不变


非常感谢您的建议。

您对过滤轮廓的要求是否有最小面积测试?若你们按面积过滤轮廓,那个么应该去掉那个些看起来很像canny正常输出的小线条。如果您确实是按面积过滤,我认为您的过滤逻辑有问题。是的,我首先在轮廓上使用convexHull,然后计算面积以仅选择小于定义的最大面积(明显小于图片面积)的区域。但您也应该选择面积大于某个最小面积的区域,过滤小轮廓。
Mat oneContour = new Mat(orig.rows(), orig.cols(), CvType.CV_8UC1);
int index = (int) (Math.random() * goodContours.size());
Imgproc.drawContours(oneContour, goodContours, index, new Scalar(255, 255, 255), -1);
Bitmap oneContourBitmap = Bitmap.createBitmap(oneContour.cols(), oneContour.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(oneContour, oneContourBitmap);