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)
答案 0 :(得分:12)
大多数.jpg
图像是8位图像。因此,他们的默认数据类型为unsigned char
或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 ++界面中枚举定义的标志。只需将CV_LOAD_IMAGE_*
替换为cv::IMREAD_*
。
e.g。 CV_LOAD_IMAGE_GRAYSCALE
变为cv::IMREAD_GRAYSCALE
。