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 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
加载为灰度(无论图像有多少个 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/