1. 程式人生 > >opencv視覺學習溫習(一)

opencv視覺學習溫習(一)

一:編寫opencv程式預處理三件套

#include <opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;

二:開胃菜
用來存放影象資料的工具:Mat

 Mat picture=imread("H:/final/fffff/111.jpg");

其中picture為變數名,將圖片儲存到變數中,二imread讀取圖片。

三:簡單讀取圖片三步走

#include <opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
int main()
{
Mat picture=imread("H:/final/fffff/111.jpg");
// 建立一個名為 "遊戲原畫"視窗
namedWindow("遊戲原畫",0);
// 在視窗中顯示遊戲原畫
imshow("遊戲原畫",picture);
// 等待6000 ms後窗口自動關閉
waitKey(6000);
}

第一部分就是Mat和imread()讀取,imread()第二的引數預設為1,如果是0則轉換為灰色圖片,另外199表示3通道彩色影象;
第二就是nameedWindow建立一個視窗;
第三就是imshow顯示,其第一引數為第二步建立的視窗名稱,第二引數為Mat的變數名。

四: 輸出影象到檔案——imwrite函式(待補充)

五:感興趣區域(ROI,region of interest)

在影象處理領域,我們常常需要設定感興趣區域(ROI,region of interest),來專注或者簡化我們的工作過程 。也就是從影象中選擇的一個影象區域,這個區域是我們影象分析所關注的重點。我們圈定這個區域,以便進行進一步處理。

定義ROI區域的兩種方法:
1:使用cv:Rect,cv::Rect表示一個矩形區域。指定矩形的左上角座標(建構函式的前兩個引數)和矩形的長寬(建構函式的後兩個引數)就可以定義一個矩形區域。

//定義一個Mat型別並給其設定ROI區域
Mat imageROI;
//方法一
imageROI=image(Rect(500,250,logo.cols,logo.rows));

2:指定感興趣行或列的範圍(Range),Range是指從起始索引到終止索引(不包括終止索引)的一連段連續序列。cv::Range可以用來定義Range。

//方法二
imageROI=srcImage3(Range(250,250+logoImage.rows),Range(200,200+logoImage.cols));

(插播waitKey()函式詳解

六:線性混合操作
addWeighted函式:

 void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1);

第一個引數,InputArray型別的src1,表示需要加權的第一個陣列,常常填一個Mat。
第二個引數,alpha,表示第一個陣列的權重
第三個引數,src2,表示第二個陣列,它需要和第一個陣列擁有相同的尺寸和通道數。
第四個引數,beta,表示第二個陣列的權重值。
第六個引數,dst,輸出的陣列,它和輸入的兩個陣列擁有相同的尺寸和通道數。
第五個引數,gamma,一個加到權重總和上的標量值。看下面的式子自然會理解。
第七個引數,dtype,輸出陣列的可選深度,有預設值-1。;當兩個輸入陣列具有相同的深度時,這個引數設定為-1(預設值),即等同於src1.depth()。

dst = src1[I]*alpha+ src2[I]*beta + gamma;