读取的像素类型

pixel type of imread

本文关键字:类型 像素 读取      更新时间:2023-10-16

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

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)

大多数.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_*即可。

例如 CV_LOAD_IMAGE_GRAYSCALE变得cv::IMREAD_GRAYSCALE.