将'raw' RGB 字节保存到图像文件



我有一个奇怪的情况,我希望能够将OpenCV.Mat写入磁盘,而无需它从 BGR(其内部表示(自动转换为 RGB。


也许这是过早转换的情况,但为了避免复制内存,我将一些原始 RGB 数据块传输到new Mat中,我并不真正关心它将其解释为 BGR,因为我使用 OpenCV 执行的所有操作都与颜色无关。

但是在保存到磁盘时,默认Mat.Save会自动将"回"转换为 RGB,所以我的原始 RGB 最终会向后转换。

我知道我可以做一个CvInvoke.CvtColor但这又回到了复制内存,这让我很恼火,Mat.Save 只是要立即转换它。

有没有办法说只需将我的像素保存到可用的文件类型,而不必将它们复制到内存中的另一个位置?

好的,我找到了一个相当深奥的解决方案,这可能对很多人没有帮助。但我碰巧也在使用Stemmer Common Vision Blox库,他们有一个方便的WrappedImage类型,可以"包裹"在像素数据块周围,让你告诉它里面有什么。

var size = mat.Cols * mat.Rows * mat.ElementSize;
WrappedImage.FromRgbPixels(mat.DataPointer, size, mat.Cols, mat.Rows, 
                           PixelDataType.UInt, 8, mat.NumberOfChannels, mat.Step, 1);

从那里您可以将其保存为任何格式,而无需(我认为(额外的逐字节转换的开销。

最新更新