我正在用这样的数组初始化一个 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。从昨天开始,我就一直坚持下去。
我正在用这样的数组初始化一个 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。从昨天开始,我就一直坚持下去。
您的矩阵包含 8 位元素(这就是CV_8UC1
意思)。您正在向它传递一个整数数组。假设 32 位整数,第一个整数 ,111
应该足以填充数组。最重要的 8 位111
将进入 position 1,1
,这些是0
s。所以你得到一个带有 value 的元素0
。
尝试传递 8 位无符号元素:
unsigned char data[4] = {111,2,3,4};
Mat A = Mat(2, 2, CV_8UC1, data);
或者,如果您需要存储有符号32
位元素,请使用CV_32S
.
尝试
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);