5

imread create 的默认像素类型是什么?我测试了不同的图像,它们都给了我不同通道的 unsigned char。如果我不明确询问, imread 会创建一个带有签名字符的像素类型吗?

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)

4

1 回答 1

17

大多数.jpg图像是 8 位图像。因此,它们的默认数据类型是unsigned charor char

有些图像喜欢.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++ 接口中 enum 定义的标志。只需替换CV_LOAD_IMAGE_*cv::IMREAD_*.

例如CV_LOAD_IMAGE_GRAYSCALE变成cv::IMREAD_GRAYSCALE.

于 2012-11-27T05:38:28.873 回答