如何使用 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 << mat;
这样的i/e 通常会这样做,但我不能使用cout << mat;
,因为它是一个指针。
我还希望你能告诉我如何用它打印一个“mat”元素,因为它已经可以访问 ptr 对象了...虽然我无法以任何方式更改 cv_Mat_ptr_index...
【问题讨论】:
【参考方案1】:Mat::ptr(i)
提供指向矩阵中第 i
th 元素的指针,被视为一个长的一维向量。
Mat::at<double>(i,0)
为矩阵的第 i
th 行的第 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 元素的主要内容,如果未能解决你的问题,请参考以下文章
如何将 cv::mat 对象从 python 模块传递给 c++ 函数并返回返回的 cv::mat 类型的对象?
包含使用 unique_ptr 的 char 数组的 C++ 对象
c++新特性11 (10)shared_ptr六”构造函数unique_ptr参数“