【问题标题】:How to print matrix values in OpenCvSharp library如何在 OpenCvSharp 库中打印矩阵值
【发布时间】:2019-05-23 15:05:06
【问题描述】:

我正在尝试使用Cv2.FindHomography 方法查找两个源的单应矩阵。到目前为止一切正常。问题是我无法获取/打印矩阵值。我真的是 C# 的初学者。我发现了一种属于它的documentation。但是,我不明白如何迭代这些值。

this[int startCol, int endCol]
override MatExpr OpenCvSharp.Mat.ColExprIndexer.this[int startCol, int endCol]
getset
Creates a matrix header for the specified column span.

Parameters
startCol    An inclusive 0-based start index of the column span.
endCol  An exclusive 0-based ending index of the column span.
Returns

我的代码,

Point2d[] points1 = new Point2d[]
{
  new Point2d(141, 131), new Point2d(480, 159)
};
Point2d[] points2 = new Point2d[]
{
  new Point2d(318, 256),
  new Point2d(5, 1)
};

Mat hCv = Cv2.FindHomography(points1, points2);
// I want to print the the resultant matrix

【问题讨论】:

    标签: c# opencv matrix iterator opencvsharp


    【解决方案1】:

    第一种方法是使用Data方法。

    byte[] data = new byte[hCv.Width * hCv.Height];
    Marshal.Copy(hCv.DataPointer, data, 0, hCv.Width * hCv.Height);
    
    for(int i = 0; i < data.Length; i++)
    {
        // Print data[i]
    }
    

    类型取决于矩阵的类型,如果是CV_8,则使用byte,如果是CV_32,则使用float


    根据this - 另一种方法是创建图像或矩阵(附加副本),然后访问每个元素

    Image<Bgr, Byte> img = hCv.ToImage<Bgr, Byte>();
    

    然后可以使用Image&lt;,&gt;.Data 属性访问像素数据。

    您还可以将 Mat 转换为 Matrix 对象。假设 Mat 包含 8 位数据

    Matrix<Byte> matrix = new Matrix<Byte>(hCv.Rows, hCv.Cols, mat.NumberOfChannels);
    hCv.CopyTo(matrix);
    

    然后可以使用Matrix&lt;&gt;.Data 属性访问像素数据。

    【讨论】:

    • cannot apply indexing with [] to an expression type IntPtr显示错误
    • @snr - 我已经编辑了答案。如上所示,使用Marshal.Copy() 将数据复制到字节数组,然后它应该可以工作。我还提供了我找到的另一种方法。
    【解决方案2】:

    这是一种不涉及复制Mat 的方法:

    for (var rowIndex = 0; rowIndex < hCv.Rows; rowIndex++)
    {
        for (var colIndex = 0; colIndex < hCv.Cols; colIndex++)
        {
            Debug.Write($"{hCv.At<double>(rowIndex, colIndex)} ");
        }
        Debug.WriteLine("");
    }
    

    只需确保尖括号内的类型(在本例中为double)是正确的。否则你会得到无意义的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-21
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多