2014-03-25 74 views
2

我有一个3x3单应性矩阵,我使用findHomography()函数计算出来的。 我将它存储在cv :: Mat矩阵中。访问openCV单应性矩阵中的元素

我尝试使用下面的代码做元素访问

float cvHomography::accessElements(const cv::Mat& aCvMat) 
{ 
    //cout << aCvMat << endl; 

    const float* Mi; 
    for(int i = 0; i < aCvMat.rows; i++){ 
     Mi = aCvMat.ptr<float>(i); 
     for(int j = 0; j < aCvMat.cols; j++){ 
      cout << Mi[j] << endl; 
     } 
    } 
} 

以上不返回从单应矩阵正确的值。 我已经通过文档,教程和谷歌搜索,我真的不能看到我做错了什么。

回答

3

这应该工作(如果你确信类型的图像是CV_64F):

void cvHomography::accessElements(const cv::Mat& aCvMat) 
{ 
    // assert aCvMat.type() == CV_64F 
    for(int i = 0; i < aCvMat.rows; i++){ 
     for(int j = 0; j < aCvMat.cols; j++){ 
      cout << aCvMat.at<double>(i,j) << endl; 
     } 
    } 
} 

而且重载运算符< <性病:: ostream的与CV作品::垫,如果你想只显示图像元素。

+0

我该如何确定矩阵的类型。 openCv文档没有说明返回矩阵的类型:( – nass

+0

@maroi。我试过了这个方法,但是我仍然得到了错误的值 另外,不,它不只是我想要做的'cout'。我很好奇about是一个事实,即超载的<< <<操作符会打印正确的矩阵,所以如果aCvMat正确,为什么'.at ()'发回错误的数据? – nass

+0

确定它毕竟是'' 。不是''。请更新你的答案,这样我就可以接受 – nass