2017-02-19 4 views
0

Fenster in Bildschiebe I arbeiten Verkehrszeichenerkennung, zunächst bin ich eine Segmentierung auf RGB-Bild angelegt Rotkanal Bild zu erhalten, wie sie in Bild 1 dargestellt ist:Varianz von

enter image description here

Secondely Ich versuche homogene Region zu finden nicht interessiert Region (kein Verkehrszeichen) zu beseitigen, indem

ich diesen Code über dem Bild, um die Varianz des Schiebefenster Berechnung verwenden, aber ich habe immer Ausnahme

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

Vielleicht sollten Sie uns sagen, welche Ausnahme und wo. Im Moment können wir nur raten. Versuchen Sie, [mcve] zu erstellen, wenn Sie eine hilfreiche Antwort wünschen. – nwp

Antwort

0

Ohne die spezifische Ausnahme kann ich nur vermuten, dass es out_of_range ist. Gemäß den Opencv-Dokumenten sind cvGet2D und cvSet2D Parameter image, y, x, die effektiv in image, rows, cols übersetzt werden. Sie haben die Definition von rows, cols umgedreht und haben eine widersprüchliche Verwendung zwischen den beiden Schleifen. Vielleicht beheben Sie diese und versuchen Sie es erneut.