【opencv】cv::Mat 公有成員函數 (Public Member Func)

  • 2020 年 3 月 12 日
  • 筆記

Public Member Func

channels()

Mat矩陣元素擁有的通道數。

depth()

用來度量每一個像素中每一個通道的精度,但它本身與影像的通道數無關。 depth數值越大,精度越高。 Mat.depth()得到的是一個0~6的數字,分別代表不同的位數,對應關係如下:

enum{CV_8U=0,CV_8S=1,CV_16U=2,CV_16S=3,CV_32S=4,CV_32F=5,CV_64F=6}

其中U是unsigned的意思,S表示signed,也就是有符號和無符號數。

elemSize()

elem是element(元素)的縮寫,表示矩陣中每一個元素的數據大小,如果Mat中的數據類型是CV_8UC1,那麼elemSize=1;如果是CV_8UC3或CV_8SC3,那麼elemSize=3;如果是CV_16UC3或者CV_16SC3,那麼elemSize=6;即elemSize是以8位(一個位元組)為一個單位,乘以通道數和8位的整數倍;

elemSize1()

elemSize加上一個「1」構成了elemSize1這個屬性,1可以認為是元素內1個通道的意思,這樣從命名上拆分後就很容易解釋這個屬性了:表示Mat矩陣中每一個元素單個通道的數據大小,以位元組為一個單位,所以有:

eleSize1==elemSize/channels;

rowRange()

為指定的行span創建一個新的矩陣頭,可取指定行區間元素。

colRange()

為指定的列span創建一個新的矩陣頭,可取指定列區間元素。

zeros()

ones()

empty()

at()

isContinuous()

判斷影像存儲是否連續。

clone()

m1 = m0.clone(); //將m0完全拷貝到m1中,同時拷貝m0中的所有數據,且拷貝的矩陣是連續的。

copyTo()

m0.copyTo(m1); // 將m0中的內容拷貝到m1中,如果有必要重新分配m1(等價於m1 = m0.clone())。 m0.copyTo(m1, mask); //將m0中,mask所指示的的數據拷貝到m1中。

convertTo()

m0.convertTo(m1, type, scale, offset); //將m0中的元素轉換成type類(CV_32F等),作scale尺度的縮放,offset偏移,寫入m1中。

setTo()

m0.setTo(s,mask); //將m0中所有的元素的值設為s;如果使用mask,則只設定mask中的非零元素。

reshape()

m0.reshape(chan, rows); //改變二維矩陣的的實際形狀,不進行數據拷貝;若chan或rows為0,則表示不作改變。

push_back()

m0.push_back(s); //對mx1矩陣進行擴展,並在末尾插入單一值s。 m0.push_back(m1); //對mxn矩陣作k行擴展,並將m1拷貝到這些行中;m1的大小為kxn。

pop_back()

m0.pop_back(n); //從m0尾部移除n行,默認情況下n為1。

locateROI()

m0.locateROI(size, offset); //將m0的大小重寫為size,如果m0重寫後變成更大的矩陣,則起始點為cv::Pointoffset點。

adjustROI()

m0.adjustROI(t, b, l, r); //在m0的上下左右分別添加t、b、l、r個像素。

total()

m0.total(); //計算所有數組元素的個數,不考慮通道。

isContinuous()

m0.isContinuous(); //如果m0所有的行在記憶體空間中打包時都沒有間隙,則返回true。

elementSize()

m0.elementSize(); //返回矩陣m0中每個元素的位元組大小(如3通道float型的矩陣則返回12)。

elementSize1()

m0.elementSize1(); //返回矩陣m0中每個次元素的位元組大小(如3通道float型的矩陣則返回4)。

type()

Mat矩陣的類型,包含有矩陣中元素的類型以及通道數資訊,type的命名格式為CV_(位數)+(數據類型)+(通道數)。 m0.type(); //返回m0中元素的有效類型標識符(如CV_32FC3)。

depth()

m0.depth(); //返回m0中單個通道中元素的有效類型標識符(如CV_32F)。

channels()

m0.channels(); //返回m0中元素的通道數目。

size()

m0.size(); //以cv::Size對象的形式返回m0的大小。

empty()

m0.empty(); //如果數組中沒有元素(如m0.total = 0或m0.data = NULL)則返回true。


參考文獻

[1] cv::Mat Class Reference [2] OpenCV3 cv::Mat類成員函數詳解 [3] OpenCV2:總結篇 cv::Mat 類 [4] OpenCV—矩陣數據類型轉換cv::convertTo [5] Opencv Mat矩陣中data、size、depth、elemSize、step等屬性的理解