【问题标题】:OpenCV Construct Mat from float* arrayOpenCV 从 float* 数组构造 Mat
【发布时间】:2014-09-11 22:06:02
【问题描述】:

我正在尝试使用带有传入数据选项的 OpenCV Mat::Mat 构造函数。

我在这个论坛上读到,您可以将浮点指针传递给数组,但每次我这样做时,它都会尝试传递地址(我认为这是正在发生的事情)而不是来自大批。

我尝试了两种不同的方式来创建浮点数组:

float *outputimg = (float*)malloc(img1.rows*img1.cols*sizeof(float));

float *outputimg = (float*)malloc(img1.step*img1.elemSize());

然后我尝试了 Mat 构造函数如下:

Mat contrastimg(img1.rows, img1.cols, CV_32F, outputimg, img1.step);

Mat contrastimg(img1.rows, img1.cols, CV_32F, outputimg);

Mat contrastimg(img1.rows, img1.cols, CV_32F, outputimg, img1.cols*sizeof(float));

这些都不适合我。有什么想法吗?

【问题讨论】:

  • 您的第二次尝试应该适用于第一个浮点数组...您如何测试它是否有效?!?
  • Mat contrastimg(img1.rows, img1.cols, CV_32F, floatptr);是有效的。

标签: c++ arrays opencv constructor mat


【解决方案1】:

我认为,做你需要的最好的方法是首先 convert 指向 CvMat 矩阵的指针,然后 construct 来自它的 Mat 对象。它应该看起来像这样:

CvMat* m = new CvMat;
m->type = yourType;
m->data.fl = outputimg;
m->rows = img1.rows;
m->cols = img1.cols;

Mat matrix(m);

【讨论】:

  • 稍微改进一下就是不使用new,直接创建CvMat m;,这样就不用冒泄露的风险,可以创建MatMat matrix(&m);。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多