日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解

發布時間:2023/12/13 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一)Mat矩陣(圖像容器)創建時CV_8UC1,CV_8UC2等參數詳解

1--Mat不但是一個非常有用的圖像容器類,同時也是一個通用的矩陣類
2--創建一個Mat對象的方法很多 ? ? ? ? ??

?

?

3--使用Mat圖像容器類創建Mat類的對象

?

? ? //! default constructor
? ? Mat();
? ? //! constructs 2D matrix of the specified size and type
? ? // (_type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.)
? ? Mat(int rows, int cols, int type);
? ? Mat(Size size, int type);
? ? //! constucts 2D matrix and fills it with the specified value _s.
? ? Mat(int rows, int cols, int type, const Scalar& s);
? ? Mat(Size size, int type, const Scalar& s);

? ? //! constructs n-dimensional matrix
? ? Mat(int ndims, const int* sizes, int type);
? ? Mat(int ndims, const int* sizes, int type, const Scalar& s);12345678910111213

?

4--使用Matlab風格的函數創建或者初始化Mat類的對象 ?

?

//! Matlab-style matrix initialization
? ? static MatExpr zeros(int rows, int cols, int type);
? ? static MatExpr zeros(Size size, int type);
? ? static MatExpr zeros(int ndims, const int* sz, int type);
? ? static MatExpr ones(int rows, int cols, int type);
? ? static MatExpr ones(Size size, int type);
? ? static MatExpr ones(int ndims, const int* sz, int type);
? ? static MatExpr eye(int rows, int cols, int type);
? ? static MatExpr eye(Size size, int type);123456789

?

? 5--我們可以看見,創建Mat矩陣/圖像容器類的很多構造方法或者其他成員方法在創建Mat對象的時候,都
? ? ? 需要指定type--所創建圖像/矩陣的類型
? 6--那么類型是什么呢?OpenCv的源代碼中說了一句:?

?

? ? (_type is CV_8UC1, CV_64FC3, CV_32SC(12) etc.)
?

?

? 7--同樣,我們通過轉到定義法,看一下CV_8UC1,CV_64FC3等這些宏到底是什么,OpenCv的源代碼顯示
? ? ? ?如下(源代碼在在types_c.h中):
12

?

#define CV_CN_MAX ? ? 512
#define CV_CN_SHIFT ? 3
#define CV_DEPTH_MAX ?(1 << CV_CN_SHIFT)

#define CV_8U ? 0
#define CV_8S ? 1
#define CV_16U ?2
#define CV_16S ?3
#define CV_32S ?4
#define CV_32F ?5
#define CV_64F ?6
#define CV_USRTYPE1 7

#define CV_MAT_DEPTH_MASK ? ? ? (CV_DEPTH_MAX - 1)
#define CV_MAT_DEPTH(flags) ? ? ((flags) & CV_MAT_DEPTH_MASK)

#define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT))
#define CV_MAKE_TYPE CV_MAKETYPE

#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))123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960

?

8--這里的type可以是任何的預定義類型,預定義類型的結構如下所示:
?

? ? CV_<bit_depth>(S|U|F)C<number_of_channels>1

? ? ?1--bit_depth---比特數---代表8bite,16bites,32bites,64bites---舉個例子吧--比如說,如
? ? ? ? 如果你現在創建了一個存儲--灰度圖片的Mat對象,這個圖像的大小為寬100,高100,那么,現在這張
? ? ? ? 灰度圖片中有10000個像素點,它每一個像素點在內存空間所占的空間大小是8bite,8位--所以它對
? ? ? ? 應的就是CV_8
? ? ?2--S|U|F--S--代表---signed int---有符號整形
? ? ? ? ? ? ? ?U--代表--unsigned int--無符號整形
? ? ? ? ? ? ? ?F--代表--float---------單精度浮點型
? ? ?3--C<number_of_channels>----代表---一張圖片的通道數,比如:
? ? ? ? ?1--灰度圖片--grayImg---是--單通道圖像
? ? ? ? ?2--RGB彩色圖像---------是--3通道圖像
? ? ? ? ?3--帶Alph通道的RGB圖像--是--4通道圖像
?

?

? ? 9--通過上面的講解,現在,我們解讀一下OpenCv的源代碼:
1

?

//【1】CV_8UC1---則可以創建----8位無符號的單通道---灰度圖片------grayImg
#define CV_8UC1 CV_MAKETYPE(CV_8U,1)
#define CV_8UC2 CV_MAKETYPE(CV_8U,2)
//【2】CV_8UC3---則可以創建----8位無符號的三通道---RGB彩色圖像---colorImg?
#define CV_8UC3 CV_MAKETYPE(CV_8U,3)
//【3】CV_8UC4--則可以創建-----8位無符號的四通道---帶透明色的RGB圖像?
#define CV_8UC4 CV_MAKETYPE(CV_8U,4)
?

#include <iostream> using namespace std; using namespace cv; int main() {Mat M(2, 2, CV_8UC3, Scalar(2, 255, 255));Mat M2(2, 2, CV_8U, Scalar(255));Mat M3(2, 2, CV_8UC2, Scalar(1, 255));Mat M4(2, 2, CV_16U, Scalar(677, 2, 255));Mat M5(2, 2, CV_32F, Scalar(5.34, 3.55, 255));cout << M << endl;cout << M5 << endl;return 0; }

有興趣的可以查看下M到M5的矩陣信息

?

總結

以上是生活随笔為你收集整理的Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。