Как сохранить изображение с прозрачным фоном в EmguCV - PullRequest
1 голос
/ 01 июня 2019

Я пытаюсь удалить фон из изображения, создав маску и вычтя фон, используя созданную маску. Когда я сохраняю изображение в png, фон сохраняется как белый.

Я пытался использовать другой тип, например rgba, и использовать функцию imread для загрузки фотографии. Ничего не сработало.

//loading the image  
var imgInput = new Image<Bgra,byte>(filePath);  

var imgInput2 = new Image<Rgb, byte>(imgInput.Size);  

//converting it to rgb                         
CvInvoke.CvtColor(imgInput,imgInput2,Emgu.CV.CvEnum.ColorConversion.Bgra2Rgb);

//not show here there is code to get the biggest contour

//generating a mask
var mask = new Image<Bgra, byte>(imgInput2.Size);
CvInvoke.Rectangle(mask, recBlack, new MCvScalar(255, 255, 255), thickness: -1);
//filling the mask with the biggest contour (the code not shown here)
CvInvoke.FillConvexPoly(mask, maxCountour.contour, new MCvScalar(0, 0,   0));
//removing the background using the mask with alpha set to zero
imgInput.Mat.SetTo(new MCvScalar(255, 255, 255, 0), mask);

//saving the png, here is the problem the background is not transparent
CvInvoke.Imwrite("test2.png", imgInput);

1 Ответ

0 голосов
/ 14 июня 2019
var mask = new Image<Bgra, byte>(imgInput2.Size);

, кажется, работает, когда я изменил тип данных изображения маски на Серый.

var mask = new Image<Grey, byte>(imgInput2.Size);
...