2017-01-12 3 views
-1

Я получил это работает нормально при использовании C++, код ниже:OpenCV - Заполнение изображения с помощью Java

Mat floodFilled = cv::Mat::zeros(dilateGrad.rows + 2, dilateGrad.cols + 2, CV_8U); 

floodFill(dilateGrad, floodFilled, cv::Point(0, 0), 0, 0, cv::Scalar(), cv::Scalar(), 4 + (255 << 8) + cv::FLOODFILL_MASK_ONLY); 
floodFilled = cv::Scalar::all(255) - floodFilled; 

Mat temp; 
floodFilled(Rect(1, 1, dilateGrad.cols - 2, dilateGrad.rows - 2)).copyTo(temp); 
floodFilled = temp; 
imshow("5. Floodfill", floodFilled); 

Но я хочу, чтобы быть в состоянии сделать то же самое в Java, где я не могу сделать что-то как это:

floodFilled = cv::Scalar::all(255) - floodFilled; 

В Java мой код это как:

private static Mat floodFill(Mat img) 
{ 
    Mat floodfilled = Mat.zeros(img.rows() + 2, img.cols()+2, CvType.CV_8U); 
    Imgproc.floodFill(img, floodfilled, new Point(0,0), new Scalar(0,255,0)); 

    return floodfilled; 
} 

результатом является то, что изображение я вернусь точно так же один Я получаю функцию. Я имею в виду, я ожидаю заполненное изображение, но я получил исходное изображение как результат, то есть ничего не происходит.

+2

Два предложения: показать больше кода Java, и показать конкретную ошибку вы получаете. –

+0

Получил это. Ред. –

+0

Cool - следующий вопрос У меня есть вопрос о вашем ожидаемом результате. Вы говорите: «результат заключается в том, что возвращаемое изображение точно совпадает с тем, которое я получаю в функции». Как это отличается от ваших ожиданий? Хороший формат для «разбитых» отчетов: «Я вижу A, но ожидаю B». Я не понимаю, из вашего вопроса, что вы ожидаете, в отличие от того, что вы получаете. –

ответ

0

Понял работает нормально с этим кодом:

private static Mat floodFill(Mat img) 
{ 
    Mat floodfilled = Mat.zeros(img.rows() + 2, img.cols() + 2, CvType.CV_8U); 
    Imgproc.floodFill(img, floodfilled, new Point(0, 0), new Scalar(255), new OpenCVForUnity.Rect(), new Scalar(0), new Scalar(0), 4 + (255 << 8) + Imgproc.FLOODFILL_MASK_ONLY); 

    Core.subtract(floodfilled, Scalar.all(0), floodfilled); 

    Rect roi = new Rect(1, 1, img.cols() - 2, img.rows() - 2); 
    Mat temp = new Mat(); 

    floodfilled.submat(roi).copyTo(temp); 

    img = temp; 

    //Core.bitwise_not(img, img); 

    return img; 
} 
Смежные вопросы