1. 程式人生 > >opencv 入門學習總結

opencv 入門學習總結

參考 學習網址:https://blog.csdn.net/column/details/opencv-tutorial.html
1.cv::Mat類是用於儲存影象以及其他矩陣資料的資料結構
2.imread函式 載入影象

用imread開啟圖片給Mat類物件
eg:

Mat myMat= imread("dota.jpg");

圖片放在工程目錄下

3.namedWindow函式
用於建立視窗
4.imshow函式
在指定的視窗中顯示一幅影象。
nameWindows和imshow中窗體名應該為一樣 否則會有兩個視窗imshow本身也會建立窗體
eg:

namedWindow("窗體"
)
; imshow("窗體",image); //第二個引數是Mat物件 也就是圖片

5.imwrite函式
將圖片寫入檔案

imwrite("圖片名.png", mat);
//第二個引數是Mat物件,也就是要寫入檔案的圖

6.ROI區域
在圖片上劃分一個區域

//講logo放在beijing上
Mat imageROI;  //定義一個Mat物件用來指定一個區域
//方法一  image代表在image這張圖片上 前兩個引數是位置  後兩個引數是區域的長寬
imageROI=image(Rect(500,250,logo.cols,logo.rows)); 
 //方法二 image代表在image這張圖片上 有兩個Range引數 代表 這兩個引數裡面又有兩個引數 分別是開始和停止的位置
imageROI=image(Range(250,250+logo.rows),Range(200,200+logo.cols));

圖片疊加的例子

Mat srcImage1= imread("beijing".jpg");  
Mat logoImage= imread("logo.jpg");
//定義一個Mat型別並給其設定ROI區域  
Mat imageROI= srcImage1(Rect(200,250,logoImage.cols,logoImage.rows));
 //載入掩模(必須是灰度圖)  
Mat mask= imread("dota_logo.jpg",0);  
//【4】logoImage參照著掩膜mask拷貝到imageROI  
logoImage.copyTo(imageROI,mask); //因為imageROI是srcImage1上的區域 所以此時疊加已經完成

7.addWeighted函式

addWeighted(srcImage1, alphaValue, srcImage2, betaValue, 0.0, dstImage);  
//上面的意思就是dst = src1*alpha+ src2*beta + gamma;  倒數第二個引數是偏移量 我還不懂 一般都是0.0
//求和的兩個必須同樣尺寸和深度  之前分通道spilt之後做加法出問題就是因為一個是單通道一個是多通道直接報錯

8.split函式
spilt函式有兩個原型

//但是前面都是要分離的影象 後面都是分離出來的結果的陣列(0是藍色 1是綠色 2是紅色)
C++: void split(const Mat& src, Mat*mvbegin);  
C++: void split(InputArray m,OutputArrayOfArrays mv); 

eg:

vector<Mat> channels;  
Mat imageBlueChannel;  
Mat imageGreenChannel;  
Mat imageRedChannel;  
srcImage4= imread("dota.jpg");  
// 把一個3通道影象轉換成3個單通道影象  
split(srcImage4,channels);//分離色彩通道  
imageBlueChannel = channels.at(0);  
imageGreenChannel = channels.at(1);  
imageRedChannel = channels.at(2);  

9.merge函式
merge是融合的意思所以就是spilt的反函式
也有兩個原型

C++: void merge(const Mat* mv, size_tcount, OutputArray dst)  //單通道影象的指標  個數 輸出
C++: void merge(InputArrayOfArrays mv,OutputArray dst)  //單通道影象陣列 輸出