2
讓我開始說我仍然是一個使用OpenCV的初學者。有些東西可能看起來很明顯,一旦我瞭解到它們,希望它們對我也很明顯。如何獲得洪水區?
我的目標是使用floodFill
功能生成一個單獨的圖像,只包含填充區域。我已經研究過這個post,但是我如何將填充的蒙版轉換爲具有填充顏色的實際BGRA圖像,我有點遺憾。除此之外,我還需要裁剪新填充的圖像以僅包含填充區域。我猜OpenCV有一些神奇的功能可以做到這一點。
這裏是我想要實現:
原圖:
填充圖像:
僅填充區域:
UPDATE 07/07/13
能夠使用以下代碼在單獨的圖像上進行填充。但是,我仍然需要找出最佳方法來獲得填充區域。另外,我的floodfill解決方案具有與填充包含alpha值圖像的問題...
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;
}
我不知道你在問什麼,該鏈接堅持它變成CV ::墊,這將是RGB值。你知道圖像矩陣是如何構建的嗎? [This link](http://stackoverflow.com/questions/8006706/opencv-resizing-and-cropping-image-according-to-pixel- value)顯示瞭如何裁剪特定的像素值,例如某種顏色 – GPPK
感謝您的發佈。我已經更新了這個問題。當我寫這篇文章的時候,我感到非常疲倦:/太倒黴了...... :(無論如何,我會看看那篇文章,看看他們在用什麼。 – Jona