imread create 的默认像素类型是什么?我测试了不同的图像,它们都给我未签名
不同 channel 的字符。如果我不问, 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(常量字符串和文件名,整数标志)

最佳答案

大多数 .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
加载为灰度(无论图像有多少个 channel ):
CV_LOAD_IMAGE_GRAYSCALE
以原始深度的灰度加载:
CV_LOAD_IMAGE_GRAYSCALE| CV_LOAD_IMAGE_ANYDEPTH
在您的情况下,lena.jpg 是 8 位图像,因此您将获得 unsigned char 数据类型。

更新:

对于较新版本的 OpenCV,请使用 C++ 接口(interface)中 enum 定义的标志。只需将 CV_LOAD_IMAGE_* 替换为 cv::IMREAD_*

例如CV_LOAD_IMAGE_GRAYSCALE 变成 cv::IMREAD_GRAYSCALE

关于c++ - imread 的像素类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13577164/

10-11 22:38