像素类型的imread

时间:2012-11-27 03:55:31

标签: c++ opencv

imread create的默认像素类型是什么?我测试不同的图像,所有这些都给我无符号 不同渠道的char。如果我不问,imread会创建一个带有signed char的像素类型 明确地

cv::Mat img = cv::imread("lena.jpg", -1); //always give me unsigned char

我检查了cv :: imread的文档,但它没有说明imread create的默认像素。

文件的链接 http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#Mat imread(const string& filename,int flags)

1 个答案:

答案 0 :(得分:12)

大多数.jpg图像是8位图像。因此,他们的默认数据类型为unsigned charchar

某些图片(如.png.tif)也支持16位像素值,因此其数据类型为unsigned short。但它没有必要,因为它们可能是8位。

要在OpenCV中按原样加载图像,请使用imread,如下所示:

cv::Mat img = cv::imread(imagePath, CV_LOAD_IMAGE_ANYCOLOR | CV_LOAD_IMAGE_ANYDEPTH);

这些标志有不同的组合:

加载为8位(无论原始深度如何):

CV_LOAD_IMAGE_COLOR

加载原始深度:

CV_LOAD_IMAGE_COLOR | CV_LOAD_IMAGE_ANYDEPTH

以灰度加载(无论图像有多少通道):

CV_LOAD_IMAGE_GRAYSCALE

以原始深度加载灰度:

CV_LOAD_IMAGE_GRAYSCALE| CV_LOAD_IMAGE_ANYDEPTH

在您的情况下,lena.jpg是8位图片,因此您获得unsigned char数据类型。

更新

对于较新版本的OpenCV,请使用C ++界面中枚举定义的标志。只需将CV_LOAD_IMAGE_*替换为cv::IMREAD_*

e.g。 CV_LOAD_IMAGE_GRAYSCALE变为cv::IMREAD_GRAYSCALE