【发布时间】:2020-04-08 20:46:15
【问题描述】:
我目前正在使用 EmguCV,我需要空垫。但显然,当我创建它时,新的 Mat 有时会有一些我不想要的随机值。
我是这样创建的:
Mat mask =new Mat(mainImg.Size,Emgu.CV.CvEnum.DepthType.Cv8U,1);
它应该是全黑的,但正如你所见,有一些垃圾导致我在阅读垫子时遇到麻烦。
有人知道为什么会这样吗?也许有一个聪明的方法来清除垫子?
提前致谢!
【问题讨论】:
我目前正在使用 EmguCV,我需要空垫。但显然,当我创建它时,新的 Mat 有时会有一些我不想要的随机值。
我是这样创建的:
Mat mask =new Mat(mainImg.Size,Emgu.CV.CvEnum.DepthType.Cv8U,1);
它应该是全黑的,但正如你所见,有一些垃圾导致我在阅读垫子时遇到麻烦。
有人知道为什么会这样吗?也许有一个聪明的方法来清除垫子?
提前致谢!
【问题讨论】:
要创建一个空的 Mat 只需使用下面的代码。
Mat img = new Mat();
如果要使其成为特定大小,请使用以下代码。在您上面的问题中,您选择了 8U 的深度类型,这可能会导致图像质量低下。这里我选择深度类型为 32F,这应该会增加新蒙版图像的质量。我还添加了 3 个通道而不是 1 个,因此您可以完全访问 Bgr 色彩空间。
Mat mask = new Mat(500, 500, DepthType.Cv32F, 3);
Mat 对象非常棒,因为您无需事先指定图像的大小或深度。同样,如果你想使用 Image 代替,你可以使用下面的代码。
Image<Bgr, byte> img = new Image<Bgr, byte>(500, 500);
您需要添加一些依赖项,但这是最简单也是我首选的方法。
【讨论】: