OpenCv Mat初始化数组无法正常工作

时间:2013-05-21 05:30:13

标签: c++ opencv image-processing

我正在使用像这样的数组初始化Mat对象

int data[4] = {111,2,3,4};
Mat A = Mat(2, 2, CV_8UC1, data);  

现在当我打印(1,1)时的值应为4

cout<<"\n m1 at 1,1 "<<(int)A.at<uchar>(1,1);

正在打印 - 0

我在Windows XP和OpenCv 2.3中使用VS2008。我从昨天开始坚持下去。

2 个答案:

答案 0 :(得分:8)

你的矩阵包含8位元素(这就是CV_8UC1的含义)。你正在传递一组int。假设32位整数,第一个111应该足以填充数组。 111的最高8位将进入位置1,1,这些是0 s。所以你得到一个值为0的元素。

尝试传递8位无符号元素:

unsigned char data[4] = {111,2,3,4};
Mat A = Mat(2, 2, CV_8UC1, data);

或者,如果您需要存储已签名的32位元素,请使用CV_32S

答案 1 :(得分:2)

尝试

unsigned char data[4] = {111,2,3,4};
Mat A = Mat(2, 2, CV_8UC1, data);  

int data[4] = {111,2,3,4};
Mat A = Mat(2, 2, CV_32SC1, data);