2016-03-09 2 views
1

Я новичок в OpenCV и пытался использовать ColorBlobDetector из образцов OpenCV, но он возвращает ошибку вColorBlobDetector не может умножать контур

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

говоря «Fatal сигнал 11 (SIGSEGV), код 1, ошибка адр 9x9 в TID 10111 (Thread-28303)

Я использую затмение.

у меня есть поиск целый день уже, кто-нибудь может сказать мне, почему эта ошибка происходит и как это исправить? Я ничего не изменить в код

И я хотел бы знать, как я могу изменить код, чтобы я мог указать приложение для обнаружения белого контура только с самого начала приложения?

спасибо.

ответ

0

я хотел бы предложить только временное решение (я не могу попробовать весь код, потому что я не использую Java)

можно редактировать следующим образом (это изменение, возможно, уменьшить скорость процесса, но он должен работать)

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); 
    } 
} 

}

+0

проблема фиксированной, спасибо большое! – shisushi

Смежные вопросы