繁体   English   中英

如何在 OpenCvSharp 库中打印矩阵值

[英]How to print matrix values in OpenCvSharp library

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

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

第一种方法是使用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<,>.Data属性访问像素数据。

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

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

然后可以使用Matrix<>.Data属性访问像素数据。

这是一种不涉及制作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 )正确。 否则你会得到无意义的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM