Я использовал метод cvGrabCut()
из emgu cv в C#, чтобы извлечь изображение переднего плана. Результат удовлетворительный, и я могу извлечь изображение переднего плана с черным фоном. Но теперь мне нужно изменить полученный черный цвет фона на другой цвет. Как я могу это сделать? Я использовал следующий код для извлечения переднего плана:Изменение цвета фона переднего плана, полученного cvGrabCut() C#
mask1.Draw(rect, new Gray(3), 0);
//the models (internally used)
Matrix<double> bgModel = new Matrix<double>(1, 13 * 5);
Matrix<double> fgModel = new Matrix<double>(1, 13 * 5);
//initialization with mask
CvInvoke.CvGrabCut(image.Ptr, mask1.Ptr, ref rect, bgModel.Ptr, fgModel.Ptr, 10, Emgu.CV.CvEnum.GRABCUT_INIT_TYPE.INIT_WITH_MASK);
//GrabCut segmentation
CvInvoke.CvGrabCut(image.Ptr, mask1.Ptr, ref rect, bgModel.Ptr, fgModel.Ptr, 15, Emgu.CV.CvEnum.GRABCUT_INIT_TYPE.EVAL);
//Get the pixels marked as likely foreground
mask1 = mask1.And(new Gray(1));
Image<Bgr, Byte> result = image.Copy(mask1);
result.Save("foreground.jpg");
Примечание: Я не уверен, какой «новый серый (n)» должен быть изменен, поэтому вам нужно будет провести некоторое тестирование. – RedLaser
Я попытался изменить изображение маски с серого на Bgr, но метод копирования дает мне ошибку: Изображение result = image.Copy (mask1); Поскольку изображение mask1 должно быть всегда типа –