1

私は Android で OpenCV 2.4.0 を使用し、バイナリ イメージで輪郭を見つけようとしています。

List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Mat mIntermediateMat = new Mat();
Imgproc.Canny(img, mIntermediateMat, 50, 100);
Imgproc.findContours(mIntermediateMat, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);

ただし、関数は「関数 CvMat で認識されないかサポートされていない配列型です...」例外をスローします。

また、このマットを入力として試します:

Mat mIntermediateMat = new Mat(height, width, CvType.CV_8UC1, new Scalar(0));

しかし、私は同じ例外を受け取ります。

4

2 に答える 2

1

この関数を試して輪郭を見つけてください:

public static ArrayList<Rect> detection_contours(Mat outmat) {
    Mat v = new Mat();
    Mat vv = outmat.clone();
    List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
    Imgproc.findContours(vv, contours, v, Imgproc.RETR_LIST,
            Imgproc.CHAIN_APPROX_SIMPLE);

    double maxArea = 100;
    int maxAreaIdx = -1;
    Rect r = null;
    ArrayList<Rect> rect_array = new ArrayList<Rect>();

    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;
            r = Imgproc.boundingRect(contours.get(maxAreaIdx));
            rect_array.add(r);
          //  Imgproc.drawContours(imag, contours, maxAreaIdx, new Scalar(0,0, 255));
        }

    }

    v.release();

    return rect_array;

}
于 2014-09-15T02:30:30.410 に答える
0

Canny() 呼び出しの後、mIntermediateMat が CvType.CV_8* 型であることを確認してください

于 2012-09-18T11:00:10.087 に答える