imread create的默认像素类型是什么?我测试了不同的图像,它们都给了我不同通道的无符号字符。如果我不显式的要求,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的链接(常量字符串和文件名,int标志)
发布于 2012-11-27 13:38:29
大多数.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::IMREAD_*替换CV_LOAD_IMAGE_*即可。
例如,CV_LOAD_IMAGE_GRAYSCALE变成了cv::IMREAD_GRAYSCALE。
https://stackoverflow.com/questions/13577164
复制相似问题