【问题标题】:accessing element in an openCV homography matrix访问openCV单应矩阵中的元素
【发布时间】:2014-05-03 10:24:04
【问题描述】:

我有一个 3x3 单应矩阵,我使用 findHomography() 函数计算了它。 我将它存储在 cv::Mat 矩阵中。

我正在尝试使用以下代码进行元素访问

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

上面没有从单应矩阵返回正确的值。 我搜索了文档、教程和谷歌,老实说,我看不出我做错了什么。

【问题讨论】:

    标签: c++ opencv matrix element homography


    【解决方案1】:

    这应该可以(如果您确定图像的类型是 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;
            }
        }
    }
    

    如果您只想显示图像元素,则 std::ostream 的重载运算符

    【讨论】:

    • 如何确定矩阵的类型。 openCv 文档没有说明返回矩阵的类型 :(
    • @maroi。我尝试了该方法,但仍然得到错误的值。另外,不,我想做的不仅仅是cout。我很好奇的是,重载的 &lt;&lt; 运算符打印了正确的矩阵。那么如果 aCvMat 是正确的,为什么.at&lt;T&gt;() 会发回错误的数据?
    • 好吧,毕竟是&lt;double&gt;。不是&lt;float&gt;。请更新您的答案,以便我接受。
    • 好的,现在是双倍的。
    • 可以通过调用 type() 函数来检查矩阵的类型,该函数是 cv::Mat 类的一部分。它返回一个常量值,定义为 OpenCV 源代码某处的宏。可以在docs.opencv.org/java/… 中查看概述。只需打印出 type() 返回的结果,并将其与表中的数字进行比较。
    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多