【发布时间】:2014-08-29 04:45:47
【问题描述】:
我有一个带有绿色和红色线条以及透明背景的 png 图像,我需要将其用作执行 GrabCut 的蒙版。但我得到了意想不到的结果。这是我的代码:
//find the mask
Mat mask;
mask.create( image.size(), CV_8UC1);
mask.setTo(Scalar::all(GC_BGD));
Mat maskImg = imread("messi5.png");
for(int i=0; i<maskImg.cols; i++)
for(int j=0; j<maskImg.rows; j++)
{
//if it's red, make it white
if ((int)maskImg.at<cv::Vec3b>(j,i)[0]==0 && (int)maskImg.at<cv::Vec3b>(j,i)[1] == 0 && (int)maskImg.at<cv::Vec3b>(j,i)[2] == 255) {
mask.at<cv::Vec3b>(j,i)[0]= GC_BGD;
mask.at<cv::Vec3b>(j,i)[1] = GC_BGD;
mask.at<cv::Vec3b>(j,i)[2] = GC_BGD;
}
//if it's green, make it black
if ((int)maskImg.at<cv::Vec3b>(j,i)[0]==0 && (int)maskImg.at<cv::Vec3b>(j,i)[1] == 255 && (int)maskImg.at<cv::Vec3b>(j,i)[2] == 0) {
mask.at<cv::Vec3b>(j,i)[0] = GC_FGD;
mask.at<cv::Vec3b>(j,i)[1] = GC_FGD;
mask.at<cv::Vec3b>(j,i)[2] = GC_FGD;
}
}
...
这是输出:http://prntscr.com/40kt4e。我想这就像没有矩形,它只看到 GC_FGD 像素,其他所有东西都被认为是 BG。它看起来以某种方式缩放,但我不知道如何修复它。
【问题讨论】:
标签: c++ opencv image-processing image-segmentation