首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用二维数组初始化OpenCV Mat

使用二维数组初始化OpenCV Mat
EN

Stack Overflow用户
提问于 2012-08-27 17:30:30
回答 4查看 92.8K关注 0票数 34

在我的应用程序中,我想创建一个具有一些值的OpenCV Mat A(二维),然后将其传递给另一个使用A作为输入的OpenCV函数。

目前,我正在尝试:

代码语言:javascript
复制
// float data[2][5] = {{1,2,3,4,5},{7,8,9,10,11}}; 
// OR
float data[10] = {1,2,3,4,5,7,8,9,10,11};

// and then
//  A = Mat(1, 5, CV_32FC1, &data, 2);   // init from float 1D - array
// OR 
    A = Mat(2, 5, CV_32FC1, &data, 2);  

在一维数组的情况下,传递的值是OK的。但这不适用于2D数组,这是更常见的情况。如何在OpenCV中解决此问题??

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-27 17:41:04

最初,我使用了OpenCV在线指南中的助记符:

代码语言:javascript
复制
Mat::Mat(Size size, int type, void* data, size_t step=AUTO_STEP)

但是我不明白文档中的size_t step=AUTO_STEP是什么意思。这意味着我可以省略OpenCV将自动选择AUTO_STEPstep参数

我试过了,这很管用:

代码语言:javascript
复制
A = Mat(2, 5, CV_32FC1, &data);

对于从数组初始化的2D Mat

票数 35
EN

Stack Overflow用户

发布于 2015-06-24 18:25:46

除了上面的答案,还有another option

对于较小的数据,我更喜欢以下内容:

代码语言:javascript
复制
Mat A = (Mat_<float>(2, 5) << 1, 2, 3, 4, 5, 7, 8, 9, 10, 11);

你可以很容易地得到想要的结果,而不需要定义额外的变量'data‘。

票数 22
EN

Stack Overflow用户

发布于 2014-05-18 21:57:33

由于data是二维数组-所有data&data*datadata[0]&data[0]&data[0][0]都指向数组的基址。可以选择上述表示形式中的任何一种来正确地构造Mat,而不是

代码语言:javascript
复制
A = Mat(2, 5, CV_32FC1, X );

让您高枕无忧,因为OpenCV使用accepted作为void*访问数据,而使用OpenCV访问数据就像使用line访问数据。我更喜欢使用相同的语法从一维数组或多维数组构造Mat。

代码语言:javascript
复制
A = Mat(1, 10, CV_32FC1, data ); //for 1D array
A = Mat(2, 5, CV_32FC1, data ); //for 2D array

返回到查询-请注意,即使从一维数组构造Mat也是不正确的。步骤参数被提到为2。由于OpenCV overrides提供了步骤参数,如果行数为1,它恰好可以工作。对于更高维数的数组,OpenCV会针对错误的步骤参数抛出调试assertion,这是您得到的。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12139402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档