OpenCV:尽管CV_16UC3,负BGR值

时间:2014-08-22 16:32:36

标签: c++ opencv

我根本无法理解opencv Mat类型:

CV_16UC3众所周知为无符号16位3通道整数。但是,当我访问每个频道时,我得到负值。根据{{​​3}} Vec3s是要访问的关键字。这是我做的:

Mat mat_l(img_height,img_width,CV_16UC3);
mat_l = imread("/home/zhao/workspace/rectified_images/l_rectified_fountain.ppm");
cout << vec_mats_l[1].at<Vec3s>(44,500)[0] << " " 
     << vec_mats_l[1].at<Vec3s>(44,500)[1] << " " 
     << vec_mats_l[1].at<Vec3s>(44,500)[2] << endl;

输出为:27522 -32382 -32407

为什么类型为beeing的负值定义为无符号???

1 个答案:

答案 0 :(得分:2)

尝试imread(path,-1);

没有标志,图像将强制进入CV_8UC3

(您可以使用cout << mat_l.type();)检查结果

另外,当你使用imread时,preallocating mat_l完全没有效果,无论如何它都会被覆盖,所以最好把它留空。


&#34;为什么负值&#34; - Vec3s已签署。无符号版本是Vec3w