[英]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.