在OpenCV C ++中打印(Mat)matrix的值

我想将OpenCV中的matrix的值转储到使用cout的控制台。 我很快就了解到,我不明白OpenvCV的types系统和C ++模板是否足够完成这个简单的任务。

请读者张贴(或指向我)一个小function或代码片段,打印一个垫?

问候,亚伦

PS:使用较新的C ++ Mat界面而不是较旧的CvMat界面的代码是优先的。

查看第一个答案来获取OpenCV C ++中的“Mat”对象(而不是CvMat对象)中的matrix元素
然后循环遍历cout << M.at<double>(0,0);所有元素cout << M.at<double>(0,0); 而不仅仅是0,0

还是更好的新的C + +接口 (感谢SSteve )

 cv::Mat M; cout << "M = "<< endl << " " << M << endl << endl; 
 #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; } 

我认为使用matrix.at<type>(x,y)不是通过Mat对象迭代的最佳方法! 如果我记得正确matrix.at<type>(x,y)将每次调用它从matrix的开始迭代(虽然我可能是错的)。 我会build议使用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; }