OpenCV를 사용하는 초보자라는 말로 시작하겠습니다. 어떤 것들은 명백해 보일 수 있으며 일단 배울 것이 확실하다면 나에게 분명해질 것입니다.floodfilled 영역을 얻는 방법?
내 목표는 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