我偶然发现了一个关于 Android 上 OpenCV drawContours 的奇怪问题。有时,(没有明显的模式)函数 drawContours 会产生这样的结果:
drawContours http://img17.imageshack.us/img17/9031/screenshotgps.png
虽然它显然应该只产生白色部分。
把它放在上下文中:我使用精明算法检测边缘,然后我找到轮廓
Imgproc.findContours(dil, contours, dummy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
然后我选择几个符合某些要求的轮廓并将它们添加到列表中:
List<MatOfPoint> goodContours = new ArrayList<MatOfPoint>();
之后我随机选择一个轮廓并在垫子上绘制它(用白色填充)并将其转换为 android Bitmap:
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);
大多数时候我得到了我所期望的:纯黑色背景上的白色补丁,但有时我得到了上面的结果。我在这里完全不知所措。我怀疑可能存在一些内存泄漏,但我尝试在所有 Mat 不再有用后立即释放它们(我也尝试在所有发生但没有效果的函数结束时释放它们)但我无法来查明问题的根源。
有没有人有类似的问题?
我首先在 OpenCV 2.4.0 上发现了这一点,但在 2.4.3 上保持不变。
任何建议表示赞赏。