imread create的默认像素类型是什么?我测试了不同的图像,它们都给了我带有不同通道的unsigned char.如果我不明确地询问它,imread是否会创建带有signed char的像素类型?
cv::Mat img = cv::imread("lena.jpg", -1); //always give me unsigned char
Run Code Online (Sandbox Code Playgroud)
我检查了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)
sga*_*zvi 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);
Run Code Online (Sandbox Code Playgroud)
这些标志有不同的组合:
加载为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.