vino.A Ответов: 0

Нахождение области выпуклой оболочки в Яве


Привет, я очень новичок в обработке изображений.Я пытаюсь вычислить плотность в opencv по контурам изображения. Но метод contourea() в моем коде дает ошибку утверждения, которая:

"Ошибка OpenCV: ошибка утверждения
(контурная.checkVector(2) &ГТ;= 0 &&усилителя;
(контурная.глубина() == CV_32F || контура.глубина() == CV_32S))
в cv:: contourea").


Как я могу это исправить? Спасибо.

Что я уже пробовал:

import static com.googlecode.javacv.cpp.opencv_imgproc.CV_THRESH_BINARY;
import java.util.ArrayList;
import java.util.List;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfInt;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Scalar;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
import static org.opencv.imgproc.Imgproc.contourArea;
import static org.opencv.imgproc.Imgproc.findContours;


public class Solidity {
    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        Mat image = Highgui.imread("D:\\MyImage.bmp");

        if (image.empty() == true) {
            System.out.println("Error: no image found!");
        } else {

            List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
            Mat image_2 = new Mat();


            Imgproc.cvtColor(image, image_2, Imgproc.COLOR_BGR2GRAY);
            Imgproc.threshold(image_2, image_2, 150, 255, CV_THRESH_BINARY);

            findContours(image_2, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);           


            for (int i = 0; i < contours.size(); i++) {
                Imgproc.drawContours(image, contours, -1, new Scalar(240, 0, 0), 2);

                double area=contourArea(contours.get(i));

                MatOfInt matOfInt=new MatOfInt();

                Imgproc.convexHull(contours.get(i),matOfInt);

                //Mat conMat=new Mat(contours.get(i).size(),CV_32FC1);
                //Error comes from here
                double hullArea=contourArea(matOfInt);

                double solidity=area/hullArea;

                System.out.println(solidity);
            }

        }

    }
}

Richard MacCutchan

Какая строка вызывает ошибку?

vino.A

double hullArea=contourea(matOfInt); / / эта строка

Richard MacCutchan

Затем вам нужно проверить документацию, чтобы увидеть, что отсутствует или неверно в параметрах, которые вы передаете в систему. contourArea метод.

0 Ответов