/ / ColorBlobDetector nie może pomnożyć konturu - Java, Android, OpenCV

ColorBlobDetector nie może pomnożyć konturu - java, android, opencv

Jestem nowy w OpenCV i próbowałem użyć ColorBlobDetector z próbek OpenCv, ale zwraca błąd w

Core.multiply(contour, new Scalar(4,4), contour);

mówiąc: „Sygnał krytyczny 11 (SIGSEGV), kod 1, adres błędu 9x9 w tid 10111 (Thread-28303)

Używam zaćmienia.

Mam już cały dzień, czy ktoś może mi powiedzieć, dlaczego ten błąd się zdarza i jak go naprawić? Nie edytowałem niczego w kodzie.

I chciałbym wiedzieć, jak mogę zmodyfikować kod, dzięki czemu mogę określić aplikację do wykrywania białego konturu tylko od początku aplikacji?

Dziękuję Ci.

Odpowiedzi:

0 dla odpowiedzi № 1

sugerowałbym tylko tymczasowe rozwiązanie (nie mogę wypróbować całego kodu, ponieważ nie używam java)

możesz edytować w następujący sposób (ta zmiana prawdopodobnie zmniejsza szybkość procesu, ale powinna działać)

public void process(Mat rgbaImage) {
//Imgproc.pyrDown(rgbaImage, mPyrDownMat);
//Imgproc.pyrDown(mPyrDownMat, mPyrDownMat);

Imgproc.cvtColor(rgbaImage, mHsvMat, Imgproc.COLOR_RGB2HSV_FULL);

Core.inRange(mHsvMat, mLowerBound, mUpperBound, mMask);
Imgproc.dilate(mMask, mDilatedMask, new Mat());

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

Imgproc.findContours(mDilatedMask, contours, mHierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);

// Find max contour area
double maxArea = 0;
Iterator<MatOfPoint> each = contours.iterator();
while (each.hasNext()) {
MatOfPoint wrapper = each.next();
double area = Imgproc.contourArea(wrapper);
if (area > maxArea)
maxArea = area;
}

// Filter contours by area and resize to fit the original image size
mContours.clear();
each = contours.iterator();
while (each.hasNext()) {
MatOfPoint contour = each.next();
if (Imgproc.contourArea(contour) > mMinContourArea*maxArea) {
//Core.multiply(contour, new Scalar(4,4), contour);
mContours.add(contour);
}
}

}