我有一个带有绿色和红色线条以及透明背景的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。而且看起来有些缩放,但我不知道该如何修复。