【问题标题】:Opencv: Working with 16bit image, Uint16Opencv:使用 16 位图像,Uint16
【发布时间】:2017-09-03 03:28:24
【问题描述】:

我有一个 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?

谢谢!

【问题讨论】:

    标签: c# image opencv opencvsharp ushort


    【解决方案1】:

    你可以直接使用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 - The Basic Image Container OpenCV 文档页面和OpenCvSharp Wiki

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 1970-01-01
      相关资源
      最近更新 更多