在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; }