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

Posted

技术标签:

【中文标题】如何使用 C++ Mat Class ptr 对象的基本 C 包装器打印 Mat 元素【英文标题】:How do I print a Mat element using this basic C wrapper for the C++ Mat Class ptr object 【发布时间】:2014-03-18 03:13:45 【问题描述】:

我正在为一些 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 &lt;&lt; mat; 这样的i/e 通常会这样做,但我不能使用cout &lt;&lt; mat;,因为它是一个指针。

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

【问题讨论】:

【参考方案1】:

Mat::ptr(i) 提供指向矩阵中第 ith 元素的指针,被视为一个长的一维向量。

Mat::at&lt;double&gt;(i,0) 为矩阵的第 ith 行的第 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

【讨论】:

以上是关于如何使用 C++ Mat Class ptr 对象的基本 C 包装器打印 Mat 元素的主要内容,如果未能解决你的问题,请参考以下文章

在图C ++插入的unique_ptr

如何将 cv::mat 对象从 python 模块传递给 c++ 函数并返回返回的 cv::mat 类型的对象?

包含使用 unique_ptr 的 char 数组的 C++ 对象

c++新特性11 (10)shared_ptr六”构造函数unique_ptr参数“

如何在 Android Opencv c++ 中获取 abs Mat?

如何在C++中获得完整的类型名称