画像の輪郭を最大にする必要があります。 これは私が現在使っているコードです。いくつかのスニペットをオンラインで集めましたAndroid OpenCV輪郭を見つける
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Imgproc.findContours(outerBox, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
double maxArea = -1;
int maxAreaIdx = -1;
for (int idx = 0; idx < contours.size(); idx++) {
Mat contour = contours.get(idx);
double contourarea = Imgproc.contourArea(contour);
if (contourarea > maxArea) {
maxArea = contourarea;
maxAreaIdx = idx;
}
}
と思われます。しかし、私はここからどうやって行くのかについてはあまりよく分かりません。 私はImgproc.floodFill
を使ってみましたが、どういうものかは分かりません。 この機能を使用するには、元のMat
+2水平および+2垂直と同じサイズのマストMat
が必要です。 これを輪郭contours.get(maxAreaIdx)
で実行したところ、エラーが発生しました。 コード:
Mat mask = Mat.zeros(contour.rows() + 2, contour.cols() + 2, CvType.CV_8UC1);
int area = Imgproc.floodFill(contour, mask, new Point(0,0), new Scalar(255, 255, 255));
エラー:
11-18 19:07:49.406: E/cv::error()(3117): OpenCV Error: Unsupported format or combination of formats() in void cvFloodFill(CvArr*, CvPoint, CvScalar, CvScalar, CvScalar, CvConnectedComp*, int, CvArr*), file /home/oleg/sources/opencv/modules/imgproc/src/floodfill.cpp, line 621
だから基本的に私の質問は、「ハイライト」それをするには、最大面積と輪郭を発見した後、どのようにすることができ、ありますか?私は他のすべてが黒で輪郭が白であることを望みます。
ありがとう!
Javaで実装できますか?私はそれを見つけることができません... – Marek
@マレックあなたはこれのJava実装を取得しましたか? –
カラーブロブ検出サンプルにjava/opencv4android findContoursの例があります。 – Mytheral