opencv C Mat類的基本知識(混

2021-07-24 11:45:40 字數 2791 閱讀 9342

data:mat物件中的乙個指標,指向記憶體中存放矩陣資料的一塊記憶體 (uchar* data)

dims:mat所代表的矩陣的維度,如 3 * 4 的矩陣為 2 維, 3 * 4 * 5 的為3維

channels:通道,矩陣中的每乙個矩陣元素擁有的值的個數,比如說 3 * 4 矩陣中一共 12 個元素,如果每個元素有三個值,那麼就說這個矩陣是 3 通道的,即 channels = 3。常見的是一張彩色有紅、綠、藍三個通道。

depth:深度,即每乙個畫素的位數(bits),在opencv的mat.depth()中得到的是乙個 0 – 6 的數字,分別代表不同的位數:enum ; 可見 0和1都代表8位, 2和3都代表16位,4和5代表32位,6代表64位;

step:是乙個陣列,定義了矩陣的布局,具體見下面分析,另外注意 step1 (step / elemsize1),m.step[m-1] 總是等於 elemsize,m.step1(m-1)總是等於 channels;

elemsize : 矩陣中每乙個元素的資料大小,如果mat中的資料的資料型別是 cv_8u 那麼 elemsize = 1,cv_8uc3 那麼 elemsize = 3,cv_16uc2 那麼 elemsize = 4;記住另外有個 elemsize1 表示的是矩陣中資料型別的大小,即 elemsize / channels 的大小

這是乙個二維矩陣,那麼維度為 2 (m.dims == 2);

m.rows == 3; m.cols == 4;

sizeof(uchar) = 1,那麼每乙個資料元素大小為 1 (m.elemsize() == 1, m.elemsize1() == 1);

cv_8u 得到 m.depth() == 0, m.channels() == 1;

因為是二維矩陣,那麼 step 陣列只有兩個值, step[0] 和 step[1] 分別代表一行的資料大小和乙個元素的資料大小,則 m.step[0] == 4, m.step[1] == 1;

假設上面的矩陣資料型別是 cv_8uc3,也就是三通道

m.dims == 2; m.channels() == 3;m.depth() == 0;

m.elemsize() == 3 (每乙個元素包含3個uchar值) m.elemsize1() == 1 (elemsize / channels)

m.step[0] == m.cols * m.elemsize() == 12, m.step[1] == m.channels() * m.elemsize1() == m.elemsize() == 3;

m.step(0) == m.cols * m.channels() == 12 ; m.step(1) == m.channels() == 3;

mat::clone()  建立乙個全拷貝

mat::copyto();  不止表示拷貝資料,還表示n=m.col(0)

mat矩陣中資料指標mat.data是uchar型別指標,cv_8u系列可以通過計算指標位置快速地定位矩陣中的任意元素。

mat m(7,7,cv_32f,scalar(1,3));

解釋如下:建立乙個m矩陣,7行7列,型別為cv_32f,c2表示有2個通道。scalar(1,3)是對矩陣進行初始化賦值。第乙個通道全為1,第2個通道全為3。

mat_對應的是cv_8u,

mat_對應的是cv_8s,

mat_對應的是cv_32s,

mat_對應的是cv_32f,

mat_對應的是cv_64f

cv::mat是乙個n維矩陣類,宣告在中。(using namespace cv)

cv::mat_是乙個模板類,宣告在中。

由於cv::mat類中含有很多模板方法,這些引數型別要到執行期才能確定,但是這種靈活性卻使得簡單的呼叫**複雜,因此就有了cv::mat_類來簡化**。

mat有3個重要的方法:

1、mat mat = imread(const string* filename); 

讀取影象

2、imshow(const string framename, inputarray mat); 

顯示影象

3、imwrite (const string& filename, inputarray img); 

儲存影象

at<>和ptr<>的區分

image.at(i,j):取出灰度影象中i行j列的點。

image.at(i,j)[k]:取出彩色影象中i行j列第k通道的顏色點。其中uchar,vec3b都是影象畫素值的型別,vec3b通過typedef vec來定義的,n代表元素的個數,t代表型別。

更簡單一些的方法:opencv定義了乙個mat的模板子類為mat_,它過載了operator()讓我們可以更方便的取影象上的點。

mat_im=image;

im(i,j)=255;

取出影象中第i行資料的指標:image.ptr(i);』

opencv遍歷的詳細介紹:

MySQL 基本操作必知必會

一下對mysql操作的介紹以安裝mysql後內建的world資料庫為例 使用某個資料庫 應該首先輸入 use show tables 可以顯示當前使用的資料庫的表名 show columns from 顯示表 中的列 用select關鍵字進行資料檢索 一下例子解釋如何檢索單個列 多個列和全部列 使用...

iOS 類知乎」分頁」效果的實現

我們先看張gif圖看一下效果 licecap錄製的有點卡,湊合看 我們先來分析一下頁面結構,然後分析具體動畫實現.頁面結構 可以將當前頁面和下個頁面復用,下個作為作為當前頁面的chilldviewcontroller,大概長這個樣子 那麼專案目錄大概長這樣 接下來就是給baseview新增對應的ta...

類的基本結構

今天早上看了一本資料結構的書關於類和動態儲存的章節。書裡面大概地舉了幾個關於在乙個類裡面動態申請記憶體的例子。我由此想到就算是乙個一般的類也應該具備一定的基本結構,而並不不是乙個類頭 幾個資料成員和成員函式就可以作為乙個類 安全 地使用。我們先看一些例子。以前,我看到過有很多人這樣寫乙個類 clas...