1. 程式人生 > >openCV學習(一)Mat資料型別

openCV學習(一)Mat資料型別

Mat資料結構

Mat型別是opencv2.0後的型別,使用此型別無需進行記憶體管理,即無需手動分配記憶體,在不需要時自動釋放記憶體,但因目前的許多嵌入式系統僅支援c語言,故而除了在某些嵌入式系統中使用cvMat或IplImage, 基本使用Mat型別。

注:後續的matrix均表示儲存影象畫素值的矩陣 。

Mat包含2個資料部分:the matrix header--包含matrix大小,儲存方法,matrix儲存地址等,matrix header記憶體大小固定;

                                  指向畫素matrix的指標。

OpenCV使用的是引用計數系統:每個Mat物件都有著自己的header,但matrix可在兩個例項中通過指向同一個matrix首地址的指標來共享資料。拷貝構造和賦值均只拷貝其header和指向matrix的指標,而非畫素資料的本身。當拷貝一個Mat物件的header時,關於matrix的計數器數值增加,一旦header被清理了,counter減少,當counter減少到0的時候,matrix的記憶體空間會被釋放。

可建立關於全部資料的子部分的header。例如,可通過建立一個有著新邊界的header來建立ROI(感興趣區域)。對應程式碼如下:

Mat D (A, Rect(10, 10, 100, 100) ); //using a rectangle
Mat E = A(Range::all(), Range(1,3)); //using row and column boundaries

OpenCV提供了clone()和copyto()兩函式來拷貝matrix資料本身,示例如下:

Mat F = A.clone();
Mat G;
A.copyTo(G);

像上述示例,修改F或G不會影響A中header所指matrix。

儲存方法

:顏色空間,資料型別。

顏色空間:RGB,HSV,HLS,YCrCb(JPEG格式圖片常用),CIE。每一種顏色空間的成分都有其有效範圍,從而決定了村塾的資料型別。

顯示建立Mat物件

Mat型別不僅可以儲存影象,還可以通過建構函式建立一個Mat物件。如:

   Mat M(2,2, CV_8UC3, Scalar(0,0,255));
    cout << "M = " << endl << " " << M << endl << endl;

<<操作符可以輸出Mat裡的真實資料值,但僅限於二維矩陣。

建構函式的引數含義:行大小,列大小,資料型別及每個矩陣元素的通道數(具體形式

CV_[The number of bits per item][Signed or Unsigned][Type Prefix]C[The channel number]

),資料。

已經存在的IplImage型別轉換成Mat型別:

IplImage* img = cvLoadImage("greatwave.png", 1);
Mat mtx(img); // convert IplImage* -> Mat

載入,轉換顏色空間,儲存影象檔案

 Mat image;
 image = imread( imageName, 1 );//讀取影象檔案
Mat gray_image;
 cvtColor( image, gray_image, COLOR_BGR2GRAY );//轉換顏色空間
imwrite( "../../images/Gray_Image.jpg", gray_image );//儲存影象檔案

相關推薦

openCV學習Mat資料型別

Mat資料結構Mat型別是opencv2.0後的型別,使用此型別無需進行記憶體管理,即無需手動分配記憶體,在不需要時自動釋放記憶體,但因目前的許多嵌入式系統僅支援c語言,故而除了在某些嵌入式系統中使用cvMat或IplImage, 基本使用Mat型別。注:後續的matrix均

Python學習3—— 基本資料型別:數字型別

基本資料型別一:數字型別 Python中最基本的資料型別之一就是int資料型別。 數字型別中有int、long 、float、complex。 python3.x之後已經不區分int和long,統一用int;python2.x還是區分的。 floa

C語言學習重點總結基本資料型別分析

一.資料型別的含義: 1.資料型別可以理解為固定大小的別名; 2.資料型別是建立變數的模子; 二.變數的本質: 1.變數是一段實際連續儲存空間的別名; 2.程式中通過變數來申請並命名儲存空間; 3.通過關鍵字可以使用儲存空間; 例項分析: 步驟:

Opencv學習Mat

作為初學者,我對於Opencv的學習總是比較迷茫,還好可以借鑑別人的部落格。Mat類的內容比較多,這次我也只是對它有個基礎、淺層的認識,在以後的學習和應用中我會根據需要和例項再不斷補充學習。一 背景    在Opencv1.X時代,資料型別為 IpIImage;    在Op

Python學習1——基礎資料型別

目錄 1、Python的應用 2、Python的優缺點 2.1 優點 2.2缺點 3.使用者輸入 4、格式化輸出 5、資料型別 5.1 bytes 5.2 字串 5.3 列表 5.4 元組 5.5 字典 5.6 集合 6、綜合例項 1、

JS基礎知識資料型別基本介紹,檢測資料型別端方法簡介】

1、基礎知識 ECMAScript(ES):規定了JS的一些基礎核心的知識(變數、資料型別、語法規範、操作語句等)  DOM:document object model 文件物件模型,裡面提供了一些屬性和方法,可以讓我們操作頁面中的元素  BOM:browser ob

opencv學習總結最近學習的影象處理函式以及waitkey()函式

常用函式 圖片讀寫 cv.imread()函式 Mat cv::imread ( const String & filename, int flags = IMREAD_COLOR ) Python: retval = cv.imread(

python 基礎篇基本資料型別的宣告和定義

     最近對python比較感興趣:所以試著先學習了一下基礎部分;順便寫一下大致感受:至於python的環境變數以及開發工具IDE就不多做解釋; helloWord print("helloWord"); python 註釋:

javaScript學習——js布林型別轉換

任意javascript值都可轉換成物件 undefined、null、0、-0、NaN、“”會被轉換成false,其他的值都會轉換成true。 <html> <body> <div> <form>

go學習——基本資料型別和基本語法

在 Go 程式語言中,資料型別用於宣告函式和變數。 資料型別的出現是為了把資料分成所需記憶體大小不同的資料,程式設計的時候需要用大資料的時候才需要申請大記憶體,就可以充分利用記憶體。 1.常見資料型別 Go 語言按類別有以下幾種資料型別: 1 布林型 布林型的值只可

Java學習基本資料型別的包裝類

byte ——> Byte short ——> Short char——> Character int ——> Integer long ——> Long float ——> Float double ——> Double boolean ——> Boolean

JavaScript 資料型別/typeof、型別轉換、邏輯運算子

一、主流瀏覽器及核心 IE ==> trident Chrome ==> webkit / blink Firefox ==> Gecko Opera ==> presto Safari ==>

redis學習——Hash資料型別

一、概述      我們可以將Redis中的Hash型別看成具有String Key和String Value的map容器。所以該型別非常適合於儲存值物件的資訊。如Username、Password和Age等。如果Hash中包含很少的欄位,那麼該型別的資料也將僅佔用很少的磁碟

思維導圖版Python3入門與進階基本資料型別

前言    自己也是在摸打滾爬中在慢慢的學習python3這門語言,之前是java開發,到後來轉向python的學習,因為python語言對於資料處理方面還是異常強大。學習語言,自己的心得還是要多實踐,最好是先打好基礎,然後自己嘗試著拿來使用,變成自己的東西才是最重要的。話不

《前端之路》 - 初試 TypeScript基礎資料型別

[TOC] ### 一、先講講 TypeScript > 什麼是 typeScript ? ` typeScript 是 Javascript 的超集 ` 我們用一張圖來簡單介紹下 ts 和 js 清清楚楚明明白白的關係~ ![](https://img2020.cnblogs.com/blog/67

python基礎學習--資料型別

Python一個 高階語言         2017-09-19 1.1  Python背景簡介(感謝偉大的廖雪峰大佬帶我們走上一條光頭路,嘿嘿) 寫了大半年Python程式碼,感覺收穫不是很大,都是現學現賣,沒有系統的瞭解過這個語言究竟是什麼樣的,從

OpenCV學習筆記3——Scalar資料型別理解

定義: 首先單詞scalar的意思是標量,但是我們經常可以看到Scalar是包含多個值的,很像是一個向量,這是怎麼回事呢?很是讓人感覺困惑。先收起我們的困惑,首先來看看,Scalar的定義: typedef struct Scalar { double val

Python 學習 python的基本資料型別 元組 列表 字典

1.Python的基本資料型別  Python有三種基本的資料型別:整型、浮點型、和虛數。 (1). 整型 Python中的整型和c中的大致相同,Python以前將-2 147 483 648和2 147 483 647之間的數字認定為整型,更大的被稱為長整型,但現在這兩種

MySQL學習 資料表基本操作

建立資料庫:create database db_name 檢視資料庫結構:show create database db_name 刪除資料庫:drop database db_name 檢視資料庫支援的資料引擎:show engins;檢視預設引擎:show engines like “

資料結構學習:高精度演算法

高精度演算法,屬於處理大數字的數學計算方法。在一般的科學計算中,會經常算到小數點後幾百位或者更多,當然也可能是幾千億幾百億的大數字。一般這類數字我們統稱為高精度數,高精度演算法是用計算機對於超大資料的一種模擬加,減,乘,除,乘方,階乘,開方等運算。對於非常龐大的數字無法在計算機中正常儲存