是一個類,由兩個數據部分構成,矩陣頭(包含矩陣尺寸,存儲方法,存儲地址等等)和一個指向存儲全部像素值的矩陣的指針函數
int cv::Mat::cols; //返回矩陣的列數 int cv::Mat::rows // 返回矩陣行數 uchar* cv::Mat::data // 指向矩陣的數據單元的指針 int cv::Mat::dims // 返回矩陣維度,該維度≥2 MatSize cv::Mat::size // 返回矩陣大小
獲取圖片高度:mat_name.cols
獲取圖片寬度:mat_name.rows
獲取圖像位深度,(即矩陣元素的存儲方式,存儲每一個像素所用的位數):3d
mat_name.depth()
獲取矩陣通道的數目:指針
mat_name.channnels()
獲取存儲的矩陣元素的數據類型(包括位深度,通道數,數據類型):code
mat_name.type()
Mat Matrix_name(行數,列數,存儲元素的數據類型,每一個矩陣點的通道數)
CV_[位數][帶符號與否][類型前綴]C[通道數]
帶符號與否:S爲符號整型,U爲無符號整型,F爲浮點型
例如CV_8UC3對象
Scalar是一個short型的向量,可以使用指定的定製化值來初始化矩陣,還能夠用來表示顏色圖片
圖像位深度=比特數+數據類型
C++中OpenCV庫的獲取方式:(函數原型)原型
int Mat::depth()
下表是返回值以及對應含義it
圖像深度 | 枚舉數值 | 空間大小 | 範圍 | 等同C++變量 |
---|---|---|---|---|
CV_8U | 0 | 8bits | 0~255 | unsigned char |
CV_8S | 1 | 8bits | -128~127 | char |
CV_16U | 2 | 16bits | 0~65535 | ushort,unsigned short int,unsigned short |
CV_16S | 3 | 16bits | -32768~32767 | short,short int |
CV32S | 4 | 32bits | -2147483648~2147483647 | int,long |
CV32F | 5 | 32bits | 1.18e-38~3.40e38 | float |
CV_64F | 6 | 64bits | 2.23e-308~1.79e308 | double |
CV_USRTYPE1 | 7 | - |
C++中OpenCV庫的獲取方式:(函數原型)table
int Mat:channels()
圖像類型=比特數+數據類型+通道數
存儲元素的數據類型:變量
CV_[位數][帶符號與否][類型前綴]C[通道數]
帶符號與否:S爲符號整型,U爲無符號整型,F爲浮點型
C++中OpenCV庫的獲取方式:(函數原型)
int Mat:type()
具體數據類型與返回值關係:
C1 | C2 | C3 | C4 | ||
---|---|---|---|---|---|
CV_8U | 0 | 8 | 16 | 24 | |
CV_8S | 1 | 9 | 17 | 25 | |
CV_16U | 2 | 10 | 18 | 26 | |
CV_16S | 3 | 11 | 19 | 27 | |
CV_32S | 4 | 12 | 20 | 28 | |
CV_32F | 5 | 13 | 21 | 29 | |
CV_64F | 6 | 14 | 22 | 30 | |
用戶定義 | 7 |
使用at
方式進行訪問,在at
的時候須要指定的數據類型對照表以下:
種類 | C1 | C2 | C3 | C4 | C6 |
---|---|---|---|---|---|
uchar 8U |
uchar |
cv::Vec2b |
cv::Vec3b |
cv::Vec4b |
|
char 8S |
|||||
ushort 16U |
|||||
short 16S |
short |
cv::Vec2s |
cv::Vec3s |
cv::Vec4s |
|
int 32S |
int |
cv::Vec2i |
cv::Vec3i |
cv::Vec4i |
|
float 32F |
float |
cv::Vec2f |
cv::Vec3f |
cv::Vec4f |
cv::Vec6f |
double 64F |
double |
cv::Vec2d |
cv::Vec3d |
cv::Vec4d |
cv::Vec6d |
示例以下:
cv::Vec3b vec3b = img.at<cv::Vec3b>(0,0); uchar vec3b0 = img.at<cv::Vec3b>(0,0)[0]; uchar vec3b1 = img.at<cv::Vec3b>(0,0)[1]; uchar vec3b2 = img.at<cv::Vec3b>(0,0)[2]; std::cout<<"vec3b = "<<vec3b<<std::endl; std::cout<<"vec3b0 = "<<(int)vec3b0<<std::endl; std::cout<<"vec3b1 = "<<(int)vec3b1<<std::endl; std::cout<<"vec3b2 = "<<(int)vec3b2<<std::endl;