如何使用C ++ Mat类ptr对象的基本C包装器打印Mat元素

时间:2014-03-18 03:13:45

标签: c++ c opencv wrapper

我正在为一些OpenCV C ++代码编写一个C包装器,我有2个函数用于创建Mat对象并分别将数据设置为cv_create_Mat_type和cv_Mat_ptr_index。 功能是他们需要的,我无法改变它们,因为我正在与某人合作完成项目的一部分。

我的问题是如何打印cv_Mat_ptr_index填充的矩阵,因为它填充了for循环内部。 cv_Mat_ptr_index的返回是一个uchar *我试过去引用它但是我需要知道如何获取cv_Mat_ptr_index,uchar *的返回内部的数据,因为我确定,如果我错了,请纠正我,它包含当前从以下代码中的数据数组分配到矩阵mat中的元素。

提前感谢任何参与者。

    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/highgui/highgui_c.h"
    #include <iostream>

    using namespace cv;
    using namespace std;



    uchar* cv_Mat_ptr_index(Mat* self, int i) {
        return self->ptr(i);
    }

    Mat* cv_create_Mat_typed(int rows, int cols, int type) {
        return new Mat(rows, cols, type);
    }

    int main(  )
    {

    float data[4][2] = { {501, 10}, {255, 10}, {501, 255}, {10, 501} };
    Mat* mat = cv_create_Mat_typed(4, 2, CV_64F);
    for(int i = 0; i < 4; i++)
        for(int j = 0; j < 2; j++)
             cv_Mat_ptr_index(mat, i)[j] = data[i][j];


    }

编辑:

我正在尝试基本上使用cv_Mat_ptr_index打印矩阵,希望它将数据设置为矩阵“mat”但是如果我不能这样做我希望你能告诉我如何使用cv_Mat_ptr_index来打印内容矩阵“垫”

我喜欢cout << mat;,但我不能使用cout << mat;,因为它是一个指针。

我也希望你能告诉我如何使用它来打印“mat”元素,因为它已经可以访问ptr对象...我无法以任何方式更改cv_Mat_ptr_index ...

1 个答案:

答案 0 :(得分:0)

Mat::ptr(i)给出了矩阵中i元素的指针,被视为长1维向量。

Mat::at<double>(i,0)为矩阵的i行的第0个元素提供引用,视为正常的2D矩阵,因此您可以获取其地址。

double* cv_Mat_ptr_index(Mat* self, int i) {
        return &self->at<double>(i,0);
}

请勿忘记取消引用从cv_Mat_ptr_index(...)分配的指针,例如

   *cv_Mat_ptr_index(mat, i)[j] = data[i][j];
// ^-- note dereference