opencv 入門學習總結
阿新 • • 發佈:2018-12-25
參考 學習網址: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) //單通道影象陣列 輸出