Как напечатать значения матрицы в библиотеке OpenCvSharp - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь найти матрицу гомографии двух источников, используя метод 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

1 Ответ

0 голосов
/ 24 декабря 2018

Первый метод использует метод 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 <>.Предполагая, что мат содержит 8-битные данные

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

Доступ к данным пикселей можно получить с помощью свойства Matrix<>.Data.

...