Open CV小細節

Open CV小細節

1.記錄時間

double time = static_cast<double>(getTickCount());  
time = ((double)getTickCount() - time)/getTickFrequency();

2.效果圖的大小、類型與原圖片相同

Mat dstImage;
dstImage.create(srcImage.rows,srcImage.cols,srcImage.type());

3.判定讀取錯誤的方法

if( !srcImage1.data ) 
{ printf("讀取srcImage1錯誤~! \n");
  return false; }

4.選定ROI並將等大小圖片疊加上

//定義一個Mat類型並給其設定ROI區域
    Mat imageROI= SrcImage1(Rect(200,250,logoImage.cols,logoImage.rows));

//加載掩模(必須是灰度圖)
    Mat mask= imread("dota_logo.jpg",0);

//將掩膜拷貝到ROI
    logoImage.copyTo(imageROI,mask);

注意copyto的用法:
srcImage.copyto(dstImage, mask)
mask作爲一個掩模板,如果在某個像素點(i, j)其值爲1(只看第一通道,所以mask單通道即可)則把srcImage.at(i, j)處的值直接賦給dstImage.at(i, j),如果其值爲0則dstImage.at(i, j)處保留其原始像素值。

5.圖片融合

addWeighted( src1, alpha, src2, beta, 0.0, dst);  

//! computes weighted sum of two arrays (dst = alpha*src1 + beta*src2 + gamma)  
CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1);  
//opencv 通過 addWeighted 函數實現圖片的線性融合.
//可以看出這個函數最小需要6個參數。

6.分離色彩通道split函數

void split(const Mat& src, Mat*mvbegin);  
void split(InputArray m,OutputArrayOfArrays mv);  

關於變量介紹:

第一個參數,InputArray類型的m或者const Mat&類型的src,填我們需要進行分離的多通道數組。
第二個參數,OutputArrayOfArrays類型的mv,填函數的輸出數組或者輸出的vector容器。
例如:

Mat srcImage;  
Mat imageROI;  
vector<Mat> channels;  
srcImage= cv::imread("dota.jpg");  
// 把一個3通道圖像轉換成3個單通道圖像  
split(srcImage,channels);//分離色彩通道  
       imageROI=channels.at(0);  
       addWeighted(imageROI(Rect(385,250,logoImage.cols,logoImage.rows)),1.0,  
              logoImage,0.5,0.,imageROI(Rect(385,250,logoImage.cols,logoImage.rows)));  

       merge(channels,srcImage4);  

       namedWindow("sample");  
       imshow("sample",srcImage);  

7.多個數組組合合併成一個多通道的數組的函數merge

void merge(const Mat* mv, size_tcount, OutputArray dst)  
void merge(InputArrayOfArrays mv,OutputArray dst)  

第一個參數,mv,填需要被合併的輸入矩陣或vector容器的陣列,這個mv參數中所有的矩陣必須有着一樣的尺寸和深度。
第二個參數,count,當mv爲一個空白的C數組時,代表輸入矩陣的個數,這個參數顯然必須大於1.
第三個參數,dst,即輸出矩陣,和mv[0]擁有一樣的尺寸和深度,並且通道的數量是矩陣陣列中的通道的總數。

//例程見上
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章