读取的像素类型
pixel type of imread
imread create的默认像素类型是什么?我测试了不同的图像,它们都给了我未签名的图像具有不同通道的字符。如果我不问,我会读取创建一个带有符号字符的像素类型明确地?
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(const string&filename, int flags)
大多数.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_LOAD_IMAGE_*
替换为cv::IMREAD_*
即可。
例如 CV_LOAD_IMAGE_GRAYSCALE
变得cv::IMREAD_GRAYSCALE
.
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 如何使用 sdl2 快速绘制像素网格?
- 如何在C++中进行像素操作? - Linux
- 他们如何将红外锁定像素转换为镜头前方 1m 的正常平面上的位置
- 访问随机图像像素的快速方法,最多一次
- OpenCV 像素访问点与 at() - 不同的值
- 如何使用 freetype2 访问单色位图中的像素状态
- 尝试渲染像素坐标时,简单线条渲染失败
- 计算另一个图像像素满足条件的像素值的平均值
- Opencv,在编译时确定像素的类型
- 读取的像素类型
- 垫子类型转换和访问单个像素时出现问题
- 为什么在访问矩阵中的像素时使用不同的数据类型会得到不同的值?