2 li15951364431 LI15951364431 于 2017.09.02 09:53 提问

OpenCV Mat对象使用数组数据块初始化

OpenCV的官网介绍Mat对象,共列出了25种基本的初始化方法。
其中,对于使用数组数据块的初始化方法官方给出的例子是

 double m[3][3] = {{a, b, c}, {d, e, f}, {g, h, i}};
 Mat M = Mat(3, 3, CV_64F, m).inv();

_但是我这样初始化我的Mat对象,数据为什么不对呢
double m[][3] = {{1, 2, 3}, {3, 0, 9}, {1, 3, 8}};
Mat M(3, 3, CV_8U, m);

这样的方式初始化的Mat对象数据根本就不是m数组里面的数据啊。请教高手解答啊
_

1个回答

Small_Mouse0
Small_Mouse0   Ds   Rxr 2017.09.02 10:11

CV_64F,,这个东西应该是类型,64位浮点,,,详细资料看最下面:
第一个数据不对?官方的例子应该很稳的,

不行的话可以分两步初始化
【1】先申请一个,mat,,,
【1】在把数组一个一个填充即可

  Mat M0(3,3,CV_32F);
 InitMat(M0,3);

详细的看看这个:http://blog.csdn.net/zssureqh/article/details/7599508

【Mat_对应的是CV_8U,
Mat_对应的是CV_8U,
Mat_对应的是CV_8S,
Mat_对应的是CV_32S,
Mat_对应的是CV_32F,
Mat_对应的是CV_64F,】

LI15951364431
LI15951364431 我单步调试,进去发现把sz的指针转化为uchar类型的,而我的数组是double类型的,转化为uchar估计是数据截断问题。话说OpenCV的data数据类型真心蛋疼,只能是uchar类型的,对特殊的mat对象就不能用data指针了,艾
3 个月之前 回复
LI15951364431
LI15951364431 官方给的例子我的理解是Mat对象与数组共用一个数据块(OpenCV很多简单的赋值操作都是这样的)。你的链接我看过,我想着我就初始化一个小的模版,不想用循环才看看官网有什么好的方法。
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片