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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV中Mat总结

發(fā)布時間:2023/12/18 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV中Mat总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、數(shù)字圖像存儲概述

數(shù)字圖像存儲時,我們存儲的是圖像每個像素點的數(shù)值,對應(yīng)的是一個數(shù)字矩陣。

二、Mat的存儲

1、OpenCV1基于C接口定義的圖像存儲格式IplImage*,直接暴露內(nèi)存,如果忘記釋放內(nèi)存,就會造成內(nèi)存泄漏。

2、從OpenCV2開始,開始使用Mat類存儲圖像,具有以下優(yōu)勢:

(1)圖像的內(nèi)存分配和釋放由Mat類自動管理

(2)Mat類由兩部分?jǐn)?shù)據(jù)組成:矩陣頭(包含矩陣尺寸、存儲方法、存儲地址等)和一個指向存儲所有像素值的矩陣(根據(jù)所選存儲方法的不同,矩陣可以是不同的維數(shù))的指針。Mat在進(jìn)行賦值和拷貝時,只復(fù)制矩陣頭,而不復(fù)制矩陣,提高效率。如果矩陣屬于多個Mat對象,則通過引用計數(shù)來判斷,當(dāng)最后一個使用它的對象,則負(fù)責(zé)釋放矩陣。

(3)可以使用clone和copyTo函數(shù),不僅復(fù)制矩陣頭還復(fù)制矩陣。

三、Mat創(chuàng)建

1、使用Mat構(gòu)造函數(shù)

Mat test(2,2,CV_8UC3,Scalar(0,0,255));

2、使用Mat構(gòu)造函數(shù)2

int sizes[3] = {2,2,2};

Mat test(3,sizes,CV_8UC3,Scalar::all(0));

3、為已存在的IplImage指針創(chuàng)建信息頭

IplImage* img = cvLoadImage("1.jpg",1);

Mat test(img);

4、利用create函數(shù)

Mat test;

test.create(4,4,CV_8UC2);

5、采用Matlab形式的初始化方式

(1)Mat me = Mat::eye(4,4,CV_64F);

(2)Mat mo = Mat::ones(2,2,CV_32F);

(3)Mat mz = Mat::zeros(3,3,CV_8UC1);

注:元素類型,即CV_[位數(shù)][帶符號與否][類型前綴]C[通道數(shù)]

四、Mat中相關(guān)成員的意義

1、data

Mat對象中的一個指針,指向存放矩陣數(shù)據(jù)的內(nèi)存(uchar* data)

2、dims

矩陣的維度,3*4的矩陣維度為2維,3*4*5的矩陣維度為3維

3、channels

矩陣通道,矩陣中的每一個矩陣元素?fù)碛械闹档膫€數(shù),比如說 3 * 4 矩陣中一共 12 個元素,如果每個元素有三個值,那么就說這個矩陣是 3 通道的,即 channels = 3。常見的是一張彩色圖片有紅、綠、藍(lán)三個通道。

4、depth

深度,即每一個像素的位數(shù),也就是每個通道的位數(shù)。在opencv的Mat.depth()中得到的是一個0 – 6的數(shù)字,分別代表不同的位數(shù):enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, CV_64F=6 },可見 0和1都代表8位, 2和3都代表16位,4和5代表32位,6代表64位。

5、elemSize

矩陣中每個元素的大小,每個元素包含channels個通道。如果Mat中的數(shù)據(jù)的數(shù)據(jù)類型是CV_8U那么elemSize = 1;是CV_8UC3那么elemSize = 3,是CV_16UC2那么elemSize = 4。

6、elemSize1

矩陣中數(shù)據(jù)類型的大小,即elemSize/channels,也就是depth對應(yīng)的位數(shù)。

7、step

是一個數(shù)組,定義了矩陣的布局,參考下圖

若矩陣有n維,則step數(shù)組大小為n

step[n-1] = elemSize(每個矩陣元素的數(shù)據(jù)大小)

step[n-2] = size(1維)*elemSize

step[n-3] = size(2維)*size(1維)*elemSize

...

step[0] = size(n-1維)*size(n-2維)*...size(1維)*elemSize

8、step1

step1也是一個數(shù)組,為step/elemSize1,若矩陣有n維,則step1[n-1] = channels。

9、type

矩陣元素的類型,即創(chuàng)建Mat時傳遞的類型,例如CV_8UC3、CV_16UC2等。

總結(jié)

以上是生活随笔為你收集整理的OpenCV中Mat总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。