2016-06-25 21 views
0

次は、OpenCV4Androidを使用してAndroidアプリで検出された青色の斑点の画像です。私はそれらを描画する輪郭を見つけるために、Core.inRange()Imgproc.findContours()方法を使用し、Imgproc.drawContours()OpenCVを使用して、検出された形状/ブロブのエッジの内側に輪郭を描く方法は?

Mat mask = new Mat(); 
Core.inRange(rgbaMat, lowerThreshold, upperThreshold, mask); 
... 
contours = new ArrayList<>(); 
Imgproc.findContours(dilatedMat, contours, new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); 
... 
for (int contourIdx=0; contourIdx < contours.size(); contourIdx++) { 
    Imgproc.drawContours (rgbaMat, contours, contourIdx, new Scalar(0, 255, 0), 1); 
} 

輪郭(ライトグリーン境界)が検出された形状の外側にあります。

ご覧のように、検出された青い斑点の周りには白い部分も含まれています。私は輪郭の境界線が青い斑点/輪郭の内側にあるようにしたい。

どうすればいいですか?私はあなたが変数 "dilatedMat"(ライン#5)の "findContours" を適用し、あなたのコード内で見ることができます

enter image description here

答えて

1

。私はあなたが "rgbaMat"(3行目のどこか)に "dilate"フィルタを適用したと仮定します。しかし輪郭を内側にしたい場合は、の代わりに「浸食」を適用する必要があります。

0

drawContourのthicknessパラメータに負の値を使用すると、検出されたオブジェクトの内部に輪郭が描画されます。

Imgproc.drawContours (rgbaMat, contours, contourIdx, new Scalar(0, 255, 0), -1); 
関連する問題