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数组里面的数据啊。请教高手解答啊
_

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,】

Pointer to the user data. Matrix constructors that take data and step parameters do not
allocate matrix data. Instead, they just initialize the matrix header that points to the specified
data, which means that no data is copied. This operation is very efficient and can be used to
process external data using OpenCV functions. The external data is not automatically deallocated, so
you should take care of it.