我正在为一些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 ...
答案 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