CV_8UC3和其他类型在OpenCV中代表什么?
What does CV_8UC3 and the other types stand for in OpenCV?
当我在OpenCV文档中找不到任何描述各种类型代表什么的内容时,我感到很惊讶,谷歌搜索也没有多大帮助。我知道CV_8UC1是灰度的,但CV_8UC3代表什么?是RGB吗?还是 YUV?
另外,types_c.h
的其他定义呢(它们也缺乏注释)。命名约定是否有模式?我能从他们的名字解释出他们的特征是什么,比如颜色等吗?
#define CV_8UC1 CV_MAKETYPE(CV_8U,1)
#define CV_8UC2 CV_MAKETYPE(CV_8U,2)
#define CV_8UC3 CV_MAKETYPE(CV_8U,3)
#define CV_8UC4 CV_MAKETYPE(CV_8U,4)
#define CV_8UC(n) CV_MAKETYPE(CV_8U,(n))
#define CV_8SC1 CV_MAKETYPE(CV_8S,1)
#define CV_8SC2 CV_MAKETYPE(CV_8S,2)
#define CV_8SC3 CV_MAKETYPE(CV_8S,3)
#define CV_8SC4 CV_MAKETYPE(CV_8S,4)
#define CV_8SC(n) CV_MAKETYPE(CV_8S,(n))
#define CV_16UC1 CV_MAKETYPE(CV_16U,1)
#define CV_16UC2 CV_MAKETYPE(CV_16U,2)
#define CV_16UC3 CV_MAKETYPE(CV_16U,3)
#define CV_16UC4 CV_MAKETYPE(CV_16U,4)
#define CV_16UC(n) CV_MAKETYPE(CV_16U,(n))
#define CV_16SC1 CV_MAKETYPE(CV_16S,1)
#define CV_16SC2 CV_MAKETYPE(CV_16S,2)
#define CV_16SC3 CV_MAKETYPE(CV_16S,3)
#define CV_16SC4 CV_MAKETYPE(CV_16S,4)
#define CV_16SC(n) CV_MAKETYPE(CV_16S,(n))
#define CV_32SC1 CV_MAKETYPE(CV_32S,1)
#define CV_32SC2 CV_MAKETYPE(CV_32S,2)
#define CV_32SC3 CV_MAKETYPE(CV_32S,3)
#define CV_32SC4 CV_MAKETYPE(CV_32S,4)
#define CV_32SC(n) CV_MAKETYPE(CV_32S,(n))
#define CV_32FC1 CV_MAKETYPE(CV_32F,1)
#define CV_32FC2 CV_MAKETYPE(CV_32F,2)
#define CV_32FC3 CV_MAKETYPE(CV_32F,3)
#define CV_32FC4 CV_MAKETYPE(CV_32F,4)
#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n))
#define CV_64FC1 CV_MAKETYPE(CV_64F,1)
#define CV_64FC2 CV_MAKETYPE(CV_64F,2)
#define CV_64FC3 CV_MAKETYPE(CV_64F,3)
#define CV_64FC4 CV_MAKETYPE(CV_64F,4)
#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n))
如文档中所述
列表中的任何基元类型都可以由 表单
CV_<bit-depth>{U|S|F}C(<number_of_channels>)
其中 U 是无符号整数类型,S 是有符号整数类型,F 是浮点类型。
所以CV_8UC3
是一个具有 3 个通道的 8 位无符号整数矩阵/图像。虽然最常见的是这意味着RGB(或实际上是BGR)图像,但它并不强制要求它。它只是意味着有三个通道,如何使用它们取决于您和您的应用程序。
命名模式描述了数据在PC内存中的实际布局方式,与图像类型没有直接关系。实际上,数据布局和图像类型是分离的。
您可能已经找到了CV_XX模式(即数据布局)的含义。
对于成像数据类型,如果您要求 OpenCV 将图像加载为彩色图像,它会将其加载为 BGR 图像并将其数据布置为CV_8UC3。需要注意的几点:
- 是
- 的,默认通道顺序是 BGR 而不是 RGB。这是一个遗留的顺序,因为在 OpenCV 1.xx 开发时,来自网络摄像头的数字视频源似乎遵循此顺序;
- 可以使用模块中的类型转换函数
imgproc
,即cv::cvtColor()
。但是,所有数据布局和图像类型都不兼容,请检查文档; - 通常忽略 Alpha 通道。通过忽略,我的意思是
cv::imwrite()
将写入一个没有 alpha 的 3 通道图像。大多数处理功能要么特定于单通道图像,要么对所有通道应用相同的处理; - 当函数接受 (alpha-) 掩码时,它通常是默认为空矩阵的
CV_8UC1
类型的可选参数。
8UC3 可帮助您访问 RGB 数据。它不仅限于图像。您也可以使用它来访问点云中的RGB数据。如果将 RGB 值作为 8UC3 类型的矩阵传递,则可以在可视化项模块中将此值显示为颜色并显示 RGB 点云。
相关文章:
- 在 OpenCV C++ 中估计基本矩阵之前对相应点进行归一化的正确方法是什么?
- 什么是使用 opencv::Mat 优化 c++ 矩阵计算
- 什么是用面部识别器opencv训练面孔以获得最佳效果的最佳方法
- opencv中的vec4i是什么
- 使用Bicubic C 的调整大小函数的OPENCV代码流是什么?
- 在所有程序中,在Visual Studio中添加OpENCV的一般方法是什么?
- OpenCv,将 4x4 cv::Mat 乘以 cv::P oint3f 的最佳方法是什么
- OpenCV VideoCapture 无法打开文件,我做错了什么?
- OpenCV中的MAT和SPARSEMAT有什么区别
- 什么是通过MPI发送OpenCV垫的最佳方法
- 错误 opencv 错误断言失败 (p [-1] <= 2) 是什么意思以及如何处理它?
- 在opencv中,什么是视频攻击器
- 在OpenCV中,DescriptorExtractor类的descriptorType()返回什么
- OpenCV中图像的以下两行有什么区别
- (OPENCV RC1)什么导致MAT乘法比每像素乘法慢20倍
- 在opencv中使用imshow显示字节数组的最快方法是什么?
- opencv 相当于 matlab 的 fliplr() 是什么?
- 在OpenCV中,std::vector而不是cv::Mat的"type"是什么解释,我该如何更改它?(C++)
- OpenCV 的 hierachicalClustering 函数中的参数 'Distance d = Distance()' 是什么?
- 什么是opencv中的~运算符,C++