Позвольте мне начать с того, что я все еще новичок, использующий OpenCV. Некоторые вещи могут показаться очевидными, и как только я узнаю их, надеюсь, они также станут для меня очевидными.Как получить залитую область?
Моя цель - использовать функцию floodFill
для создания отдельного изображения, содержащего только заполненную область. Я рассмотрел этот post, но я немного потерял, как преобразовать заполненную маску в фактическое изображение BGRA с заполненным цветом. Кроме того, мне также нужно обрезать вновь заполненное изображение, чтобы оно содержало только заполненную область. Я предполагаю, что у OpenCV есть волшебная функция, которая могла бы сделать трюк.
Вот что я пытаюсь достичь:
Исходного изображения:
Заполненного изображение:
заливки только:
ОБНОВЛЕНИЕ 07/07/13
Удалось заполнить отдельное изображение, используя следующий код. Тем не менее, мне все же нужно найти лучший подход, чтобы получить только заполненную область. Кроме того, моя заливка решения имеет проблемы с заполнением образа, который содержит значение альфа ...
static int floodFillImage (cv::Mat &image, int premultiplied, int x, int y, int color)
{
cv::Mat out;
// un-multiply color
unmultiplyRGBA2BGRA(image);
// convert to no alpha
cv::cvtColor(image, out, CV_BGRA2BGR);
// create our mask
cv::Mat mask = cv::Mat::zeros(image.rows + 2, image.cols + 2, CV_8U);
// floodfill the mask
cv::floodFill(
out,
mask,
cv::Point(x,y),
255,
0,
cv::Scalar(),
cv::Scalar(),
+ (255 << 8) + cv::FLOODFILL_MASK_ONLY);
// set new image color
cv::Mat newImage(image.size(), image.type());
cv::Mat maskedImage(image.size(), image.type());
// set the solid color we will mask out of
newImage = cv::Scalar(ARGB_BLUE(color), ARGB_GREEN(color), ARGB_RED(color), ARGB_ALPHA(color));
// crop the 2 extra pixels w and h that were given before
cv::Mat maskROI = mask(cv::Rect(1,1,image.cols,image.rows));
// mask the solid color we want into new image
newImage.copyTo(maskedImage, maskROI);
// pre multiply the colors
premultiplyBGRA2RGBA(maskedImage, image);
return 0;
}
Я не уверен, что вы спрашиваете, что ссылка засовывает ее в сорте :: коврик, который будет значения RGB , Вы знаете, как построены матрицы изображений? [Эта ссылка] (http://stackoverflow.com/questions/8006706/opencv-resizing-and-cropping-image-according-to-pixel-value) показывает, как обрезать для определенного значения пикселя, например. определенный цвет – GPPK
Спасибо за сообщение. Я обновил вопрос. Я так устал, когда писал это:/слишком плохо для пустых голосов ... :(В любом случае я посмотрю в этом посте и посмотрю, что они используют. – Jona