我正在尝试使用
显示图像Mat_<float> depth_image_16_bit = imread(path_to_image, -1);
但无法加载。它显示断言错误。
它适用于Mat
,但不适用于short
或float
。
答案 0 :(得分:1)
如果在imread
中使用的参数-1
相当于IMREAD_UNCHANGED
,则会得到一个包含原始通道数的8位图像。
所以如果你的形象是:
Mat1b
(又名Mat_<uchar>
)Mat3b
(又名Mat_Vec3b
)Mat4b
(又名Mat_Vec4b
)因此,您可以查看Mat
频道的类型和数量,然后更改为更正Mat_<Tp>
:
Mat img = imread(filename, IMREAD_UNCHANGED);
cout << img.channels();
cout << img.depth() << endl;
或者您可以在加载后将其转换为float
:
Mat img = imread(filename, IMREAD_UNCHANGED);
img.convertTo(img, CV_32F); // now your image is of CV_32F type
或者,您可以使用正确的深度加载它(如果您的图像每像素有2个字节,这很有用):
Mat img = imread(filename, IMREAD_ANYDEPTH);
cout << img.channels();
cout << img.depth() << endl;