OpenCV 从 float* 数组构造 Mat
Posted
技术标签:
【中文标题】OpenCV 从 float* 数组构造 Mat【英文标题】:OpenCV Construct Mat from float* array 【发布时间】: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);是有效的。 【参考方案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;
,这样就不用冒泄露的风险,可以创建Mat
:Mat matrix(&m);
。跨度>
以上是关于OpenCV 从 float* 数组构造 Mat的主要内容,如果未能解决你的问题,请参考以下文章
bzoj3289Mato的文件管理 离散化+莫队算法+树状数组