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>();
その後、1 つの輪郭をランダムに選択し、マットに (白で塗りつぶして) 描画し、Android ビットマップに変換します。
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 でも同じままです。
どんな提案でも大歓迎です。