2011-11-01 11 views
46

OpenCVの行列の値をcoutを使ってコンソールにダンプしたい。私はすぐに、OpenvCVのタイプシステムやC++テンプレートがこの簡単なタスクを実行するのに十分理解していないことを知りました。OpenCV C++の(Mat)行列の値を出力する

マットを印刷する小さな機能やコードスニペットを投稿してもいいですか?

よろしく、 アーロン

PS:コード優先され、古いCvMatのインターフェイスとは対照的に、新しいC++マット・インタフェースを使用しています。

答えて

68

cout << M.at<double>(0,0);だけでなく0,0

内のすべての要素の上にAccesing a matrix element in the "Mat" object (not the CvMat object) in OpenCV C++
それからちょうどループの最初の答えを参照するか、またはより良いまだnew C++ interfaceSSteveのおかげで)

cv::Mat M; 

cout << "M = "<< endl << " " << M << endl << endl; 
+1

を使用することをお勧めしhttp://opencv.itseez.com/doc/tutorials/core/mat%20-%20the%20basic%20image%20container /mat%20-%20the%20basic%20image%20container.html#print-out-formatting) – SSteve

+1

ブリリアント。誰か<<を実装していたかどうかを知るために、最初にマットを押しつぶしてください。もう少し実験と信頼が私のために払われたでしょう。 – ahoffer

+0

私はちょうど[これについての質問](http://stackoverflow.com/questions/10011797/opencv-2-1-where-is-ostream-operator-for-cvmat)に尋ねました。 ostream演算子は2.1で利用可能ですか?この文書はどこに文書化されていますか? – juanchopanza

3
#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; 
} 
関連する問題