Матричное умножение является очень простой задачей при обработке изображений, и OpenCV заботится о перегруженном * операторе.Вектор точек STL может быть преобразован в Mat путем приведения.
vector<Point2f> p1(2);
p1[0].x=1;p1[0].y=0;
p1[1].x=0;p1[1].y=1;
Mat p1M=Mat(p1);
Как упоминалось в документации OpenCV, это создаст матрицу с одним столбцом (с 2 элементами) со строками, равными ни одному из векторов:
[1 0;0 1]------>p1M.rows=2;p1M.cols=1
Это создает проблему, когда вы хотите умножить матрицу (p1M * p1M) ... [2x1] * [2x1] ??? ... По сути, я считаю, что весь вектор приведения к Matrixобъединить векторы как есть ....
Однако команда p1M.at<float> (0,1)
и p1M.at<float> (1,0)
возвращает 0 и 1 соответственно.это заставило меня думать, что p1M * p1M возможен, но, к сожалению, он только компилируется и генерирует ошибку времени выполнения:
Ошибка OpenCV: сбой подтверждения (a_size.width == len) в gemm, file / home /james / OpenCV-2.3.1 / modules / core / src / matmul.cpp, строка 708 завершается, после вызова экземпляра cv :: Exception what (): /home/james/OpenCV-2.3.1/modules/core / src / matmul.cpp: 708: ошибка: (-215) a_size.width == len в функции gemm
Я думаю о написании функции, которая просто делает это!вектор к мату и наоборот ... я что-то упустил?