Распечатайте значения матрицы (Mat) в OpenCV С++
Я хочу сбросить значения матрицы в OpenCV на консоль с помощью cout. Я быстро понял, что я не понимаю систему типа OpenvCV и шаблоны С++ достаточно хорошо, чтобы выполнить эту простую задачу.
Читатель, пожалуйста, напишите (или укажите мне) небольшую функцию или фрагмент кода, который печатает Mat?
С уважением,
Аарон
PS: Кодекс, который использует новый интерфейс С++ Mat, в отличие от старого интерфейса CvMat, является предпочтительным.
Ответы
Ответ 1
См. первый ответ Принятие матричного элемента в "Мат" . объект (а не объект CvMat) в OpenCV С++
Затем просто переместите все элементы в cout << M.at<double>(0,0);
, а не только 0,0
Или еще лучше с новым С++-интерфейсом (благодаря SSteve)
cv::Mat M;
cout << "M = "<< endl << " " << M << endl << endl;
Ответ 2
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <iomanip>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
double data[4] = {-0.0000000077898273846583732, -0.03749374753019832, -0.0374787251930463, -0.000000000077893623846343843};
Mat src = Mat(1, 4, CV_64F, &data);
for(int i=0; i<4; i++)
cout << setprecision(3) << src.at<double>(0,i) << endl;
return 0;
}
Ответ 3
Я думаю, что использование matrix.at<type>(x,y)
- не лучший способ повторить через объект Mat!
Если я правильно помню, matrix.at<type>(x,y)
будет перебирать с начала матрицы каждый раз, когда вы его вызываете (я мог бы ошибаться, хотя).
Я бы предложил использовать cv::MatIterator_
cv::Mat someMat(1, 4, CV_64F, &someData);;
cv::MatIterator_<double> _it = someMat.begin<double>();
for(;_it!=someMat.end<double>(); _it++){
std::cout << *_it << std::endl;
}