0

我有一个 12 位图像,我想在 Opencv 中使用,例如检测 blob 等。

该图像现在是一个 Uint16 数组。我想将它转换为 Opencv Mat 或 Iplimage。我需要这样做以便阈值和检测 blob。

我正在做的是将 ushort 数组转换为位图,然后使用 opencv 扩展转换为 Mat,见下文。

ushort[,] red = new ushort  [480,640];
//Grab image in to ushort array
//..
 bmpred = U16ArrayToBitmap(red);
 Mat redMat = new Mat();
 redMat = OpenCvSharp.Extensions.BitmapConverter.ToMat(bmpred);

现在 redMat,我的 Mat 图像是 U8C4,据我了解它的 4 Chanel Unsigned 8 位。这对我不起作用,因为我想使用所有 12 位!

是否可以将 ushort 数组或位图转换为 16 位灰度 Mat 或 iplimage?

谢谢!

4

1 回答 1

0

您可以直接使用Mat构造函数:

var mat = new Mat(red.GetLength(0), red.GetLength(1), MatType.CV_16UC1, red);

或使用MatOfUShort

var mat = new MatOfUShort(red.GetLength(0), red.GetLength(1), red);

请注意,这mat是使用指向red数组的指针。mat如果要使用副本,请克隆:

var clone = mat.Clone();

有关更多信息,请查看Mat - 基本图像容器OpenCV 文档页面和OpenCvSharp Wiki

于 2017-05-16T12:56:28.447 回答