opencv中的幾種常見的圖像數據類型

1 opencv中的幾種常見的圖像類型

opencv中,幾種常見的圖像類型有:html

IplImage,Mat,CvMat,CvArr ide


CvArr :函數

老版本的結構了。是一個抽象基類,在函數原型中,常見到CvArr(CvArr*),這就容許吧CvMar* 或者IplImage* 傳遞到程序或函數參數中了。ui

CvMat :編碼

矩陣結構,spa

IplImage :指針

是較老版本的一種類型了,對圖像進行」編碼「的基本結構。這些圖像多是灰度,彩色,4通道的(RGB+ alpha),其中,每一個通道能夠包含任意的整數或浮點數。code

Mat:htm

新版本中的強大的一個圖像容器,是和Matlab中的函數對應的。基本上講 Mat 是一個類,由兩個數據部分組成:矩陣頭(包含矩陣尺寸,存儲方法,存儲地址等信息)和一個指向存儲全部像素值的矩陣(根據所選存儲方法的不一樣矩陣能夠是不一樣的維數)的指針。矩陣頭的尺寸是常數值,但矩陣自己的尺寸會依圖像的不一樣而不一樣,一般比矩陣頭的尺寸大數個數量級。blog

2 opencv中存儲圖像類型轉換

(1)將IplImage類型轉換到Mat類型

Mat::Mat(const IplImage* img, bool copyData=false);

默認狀況下,新的Mat類型與原來的IplImage類型共享圖像數據,轉換隻是建立一個Mat矩陣頭。當將參數copyData設爲true後,就會複製整個圖像數據。

例:

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

Matmtx(iplImg); // IplImage* ->Mat 共享數據

// or : Mat mtx = iplImg;

(2)將Mat類型轉換到IplImage類型

一樣只是建立圖像頭,而沒有複製數據。

例:

IplImage ipl_img = img; // Mat -> IplImage

(3)將CvMat類型轉換爲Mat類型

與IplImage的轉換相似,能夠選擇是否複製數據。

Mat::Mat(const CvMat* m, bool copyData=false);

(4)將Mat類型轉換爲CvMat類型

與IplImage的轉換相似,不復制數據,只建立矩陣頭。

例:

// 假設Mat類型的imgMat圖像數據存在

CvMat cvMat = imgMat; // Mat -> CvMat


幾個例子:

爲矩陣定義了一系列方便的操做符。咱們能夠將一個已經存在的灰度圖像 img 變成全黑色:

img = Scalar(0);

選擇感興趣區域:

Rect r(10, 10, 100, 100);Mat smallImg = img(r);

將 Mat 轉爲 C API 數據類型:

Mat img = imread("image.jpg");IplImage img1 = img;CvMat m = img;

注意此處無數據複製操做。

將彩色圖像轉爲灰度圖像:

Mat img = imread("image.jpg"); // loading a 8UC3 imageMat grey;cvtColor(img, grey, CV_BGR2GRAY);

將圖像的類型從8UC1轉爲32FC1:

src.convertTo(dst, CV_32F);


3 總結

仍是要多參考,多用,映像才深入

4 參考

http://www.cnblogs.com/zcftech/archive/2013/04/10/3013027.html

http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/user_guide/ug_mat.html#id6

相關文章
相關標籤/搜索