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