2017-02-19 25 views
0

滑動窗口I對交通標誌的檢測工作,首先我施加在RGB圖像的分割,以獲得紅色通道圖像,因爲它是在圖像1中示出:方差在圖像

enter image description here

Secondely我嘗試找到均勻區域通過計算滑動窗口的圖像

我用這個代碼上面的變化,以消除不感興趣區域(未設交通標誌),但我一直異常

int main(int argc, char** argv) 
{ 
    IplImage *image1; 

    if ((image1 = cvLoadImage("segmenter1/00051.jpg", 0)) == 0) 
     return NULL; 

    int rows = image1->width; 
    int cols = image1->height; 

    Mat image = Mat::zeros(cols, rows, CV_32FC1); 
    double x = 0; 
    double temp = 0; 

    for (int i = 0; i < rows; i++){ 
     for (int j = 0; j < cols; j++){ 
      temp = cvGet2D(image1, j, i).val[0]; 

      x = temp/255; 

      image.at<float>(j, i) = x; 
      x = image.at<float>(j, i); 
     } 
    } 

    int k = 16; 
    double seuil = 0.0013; 
    CvScalar blanc;//pixel blanc 
    blanc.val[0] = 255; 
    cv::Scalar mean, stddev; //0:1st channel, 1:2nd channel and 2:3rd channel 

    for (int j = 0; j < rows - k; j++) 
    { 
     for (int i = 0; i < cols - k; i++) 
     { 
      double som = 0; 
      double var = 0; 
      double t = 0; 

      for (int jj = j; jj < k+j; jj++) 
      { 
       for (int ii = i; ii < k+i; ii++) 
       { 
        t = image.at<float>(jj, ii); 
        som = som + t; 
        t = t*t; 
        var =var+ t; 
       } 
      } 

      som = som/(k*k); 
      if (som>0.18){ 
       var = (var/(k*k)) - (som*som); 
       if (var < seuil) 
        cvSet2D(image1, j, i, blanc); 
      } 
     } 
    } 

    char stsave[80]; 
    cvSaveImage("variance/00051.jpg", image1); 
    cv::waitKey(0);           
    return 0; 
} 
+1

也許你應該告訴我們哪個例外和哪裏。現在我們只能猜測。如果你想得到一個有用的答案,試着製作[mcve]。 – nwp

回答

0

沒有特定的例外,我只能猜測它是out_of_range。根據opencv文檔,cvGet2DcvSet2D參數是image, y, x,其有效轉換爲image, rows, cols。您翻轉了rows, cols的定義,並在兩個循環之間使用衝突。也許修復這些並再試一次。