imread函数不适用于Windows上的.PNG

时间:2016-04-20 10:34:19

标签: visual-c++ opencv3.0

我正在尝试使用

显示图像
Mat_<float> depth_image_16_bit = imread(path_to_image, -1); 

但无法加载。它显示断言错误。 它适用于Mat,但不适用于shortfloat

1 个答案:

答案 0 :(得分:1)

如果在imread中使用的参数-1相当于IMREAD_UNCHANGED,则会得到一个包含原始通道数的8位图像。

所以如果你的形象是:

  • 单一频道,您获得Mat1b(又名Mat_<uchar>
  • 3个频道,您获得Mat3b(又名Mat_Vec3b
  • 4个频道,您获得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;