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

CV_16UC3是众所周知的无符号16位3通道整数。但是,当我访问每个通道时,会得到负值。根据How should I name my RGB channels, using cv::Mat_,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

为什么尽管类型蜂定义为负值无符号???

最佳答案

尝试imread(path,-1);

没有该标志的图像将被强制插入CV_8UC3

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

同样,当您使用imread时,预分配mat_l完全无效,无论如何它将被覆盖,因此最好将其留空。

“为什么负值”-Vec3s已签名。未签名的版本是Vec3w

关于c++ - OpenCV:尽管CV_16UC3,但BGR值为负,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25451683/

10-14 23:54