OpenCV 自定義任意區域形狀及計算平均值 方差


opencv中有矩形的Rect函數、圓形的circl函數等,那么任意形狀怎么取呢?方法1:點乘,將其形狀與圖像進行點乘,求其形狀對應的圖像形狀;方法2:用findContours函數得對應的形狀區域,其邊緣顯示類型可以通過設置參數可以控制;

方法1:點乘

 1 //===============================對應灰度圖的區域segImage==============================================================
 2     // 遍歷圖像 對每個非零像素值賦值為對應灰度圖的像素值
 3 
 4     Mat zeroImage(Size(rioImage.cols, rioImage.rows), CV_8U, Scalar(0));//建立全0矩陣
 5     for (int i = 0; i < closeImg.rows; i++)//行遍歷
 6     {
 7 
 8         unsigned char* ptr = (unsigned char*)closeImg.data + closeImg.step*i;
 9 
10         for (int j = 0; j < closeImg.cols; j++)//列遍歷
11         {
12             int intensity = ptr[j];
13             if (intensity != 0)
14 
15             {
16                 zeroImage.at<uchar>(i, j) = rioImage.at<uchar>(i, j);//對應位置賦值為灰度圖像素
17             }
18         }
19     }
20 
21     zeroImage.copyTo(segImage);
22     //imshow("segImage.jpg", segImage);
23     //waitKey(0);
24 }

 

 

對於一個區域,怎么進一步針對區域內部特征進行處理呢 ? 首先,我們要提取出來內部的某些特征才能說話,下面提取一些簡單的特征,話不多說見代碼:

1.平均數及方差參數:

 1 Mat tempMean, tempStddv;
 2                         double MEAN, STDDV;// mean and standard deviation of the flame region
 3                         double m = mean(flameRectRegion)[0];
 4                         //cout << "mean=" << m << endl;
 5                         meanStdDev(flameRectRegion, tempMean, tempStddv);
 6 
 7                         MEAN = tempMean.at<double>(0, 0);
 8                         STDDV = tempStddv.at<double>(0, 0);
 9                         //cout << "mean=" << MEAN << endl;
10                         //cout << "stddv=" << STDDV << endl;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM