2015-06-07 2 views
2

Я просто хочу использовать заливку заливки, но она терпит неудачу, и я никогда не использовал ее, поэтому я думаю, что я делаю что-то неправильно.Использование заливки OpenCV

Mat flooded=new Mat(); 
Point flood=new Point(1,1); 
// floodedmat = Mat.zeros(myMat2.size(), CvType.CV_8UC1); 
Imgproc.floodFill(myMat2, flooded, flood, new Scalar(255, 255, 255)); 
Utils.matToBitmap(flooded, copy); 

После заполнения заливки я намерен вернуть его в растровое изображение, чтобы отобразить его, чтобы увидеть изменения.

+0

кто-то меня спасет – user3768470

ответ

0

Вы должны использовать перегруженный метод заливки, который принимает дополнительные параметры:

Imgproc.floodFill(myMat2, flooded, flood, new Scalar(255, 255, 255), new Rect(), lowerDiff, upperDiff, 4); 

Нового Rect() объект представляет собой ограничивающий прямоугольник, который будет содержать заливка; lowerDiff и upperDiff должны быть инициализированными скалярами с разностным значением в исходное значение пикселя (т. Е. Если это изображение RGB с разницей в значениях цвета, скажем, на вашей начальной точке (наводнении) есть ярко-желтый пиксель, и он окружен слегка менее яркие или чуть более яркие желтые пиксели, они заполнят их белыми цветными прямоугольниками). Вы хотите, чтобы инициализировать их с 3-мя значениями, а именно:

Scalar lowerDiff = new Scalar(10, 10, 10); 

И последний целочисленный аргумент, как много соседних пикселей если заливка на самом деле принимать во внимание, 4 по умолчанию, 8 другой вариант. (4 будут отображены северные, восточные, западные и южные пиксели, а 8 - северные, северо-восточные, восточные, юго-восточные и т. Д.).

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