有道是:好记性不如烂笔头。记下经验,更重要的是记下踩过的坑
场景:读取图像
Mat imread(const string& filename, int flags=1 )
这里的flags默认是1,参数可能取值为
-
0, CV_LOAD_IMAGE_COLOR, If set, always convert image to the color one. 若有 alpha 属性,则舍弃。
- = 0, CV_LOAD_IMAGE_GRAYSCALE, If set, always convert image to the grayscale one. Return a grayscale image.
- < 0, CV_LOAD_IMAGE_ANYDEPTH - If set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit.
注意,读取彩图的时候,可以简写成 Mat img=imread(path)
, 但是读取灰度图的时候必须写全 Mat img=imread(path, 0)
。否则,不会报错,但会自动改变数据类型
- 使用
imread(path, 0)
误读取彩图,尺寸不变,数据类型 16 -> 0 (CV_8UC3->CV_8U),最后结果自动变为灰度图 - 使用
imread(path)<