OpenCVの行列の値をcoutを使ってコンソールにダンプしたい。私はすぐに、OpenvCVのタイプシステムやC++テンプレートがこの簡単なタスクを実行するのに十分理解していないことを知りました。OpenCV C++の(Mat)行列の値を出力する
マットを印刷する小さな機能やコードスニペットを投稿してもいいですか?
よろしく、 アーロン
PS:コード優先され、古いCvMatのインターフェイスとは対照的に、新しいC++マット・インタフェースを使用しています。
OpenCVの行列の値をcoutを使ってコンソールにダンプしたい。私はすぐに、OpenvCVのタイプシステムやC++テンプレートがこの簡単なタスクを実行するのに十分理解していないことを知りました。OpenCV C++の(Mat)行列の値を出力する
マットを印刷する小さな機能やコードスニペットを投稿してもいいですか?
よろしく、 アーロン
PS:コード優先され、古いCvMatのインターフェイスとは対照的に、新しいC++マット・インタフェースを使用しています。
は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++ interface(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)
はあなたがそれを呼び出すたびに行列の始めから繰り返されます(私は間違っているかもしれません)。 私は(また、[チュートリアルのこのセクション]を参照してください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;
}
を使用することをお勧めしhttp://opencv.itseez.com/doc/tutorials/core/mat%20-%20the%20basic%20image%20container /mat%20-%20the%20basic%20image%20container.html#print-out-formatting) – SSteve
ブリリアント。誰か<<を実装していたかどうかを知るために、最初にマットを押しつぶしてください。もう少し実験と信頼が私のために払われたでしょう。 – ahoffer
私はちょうど[これについての質問](http://stackoverflow.com/questions/10011797/opencv-2-1-where-is-ostream-operator-for-cvmat)に尋ねました。 ostream演算子は2.1で利用可能ですか?この文書はどこに文書化されていますか? – juanchopanza