首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >imread的像素类型

imread的像素类型
EN

Stack Overflow用户
提问于 2012-11-27 11:55:31
回答 1查看 7.6K关注 0票数 4

imread create的默认像素类型是什么?我测试了不同的图像,它们都给了我不同通道的无符号字符。如果我不显式的要求,imread会创建一个带符号字符的像素类型吗?

代码语言:javascript
复制
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标志)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-27 13:38:29

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

一些图像,如.png.tif,也支持16位像素值,因此它们的数据类型为unsigned short。但这不是必需的,因为它们可能是8位的。

要在OpenCV中按原样加载图像,请使用imread,如下所示:

代码语言:javascript
复制
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

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13577164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档