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



我正在为一些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*的返回中获取数据,因为我确信,如果我错了,请纠正我,它包含当前从数据数组中分配到矩阵席的元素。

提前感谢任何接受者。

    #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打印矩阵"mat"的内容

i/e像cout << mat;通常会做,但我不能使用cout << mat;,因为它是一个指针。

我也希望你能告诉我如何用它打印一个元素"mat",因为它已经可以访问ptr对象…我不能以任何方式改变cv_Mat_ptr_index

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

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

相关内容

  • 没有找到相关文章

最新更新