title: Error with OpenCV ROI
body: <p>I am trying to make a program that will identify a pattern by sliding a ROI over an image and comparing the ROI with a template, it will compare pixel values of the ROI and the template and increase a counter by 1 each time a pixel matches, then I compare the counter with a threshold, if it passes a rectangle will be drawn, if not, it will continue to slide trough the image, if I run the debugger on it, it shows no errors sliding trough the image, but if i run it normally it throws the next exception:</p>
  
  <pre><code>OpenCV Error: Assertion failed (0 &lt;= roi.x &amp;&amp; 0 &lt;= roi.width &amp;&amp; roi.x + roi.width &lt;= m.cols &amp;&amp; 0 &lt;= roi.y &amp;&amp; 0 &lt;= roi.height &amp;&amp; roi.y + roi.height &lt;= m.rows) in Mat, file /home/abuild/rpmbuild/BUILD/opencv-2.4.6.1/modules/core/src/matrix.cpp, line 323
  terminate called after throwing an instance of 'cv::Exception'
  what():  /home/abuild/rpmbuild/BUILD/opencv-2.4.6.1/modules/core/src/matrix.cpp:323: error: (-215) 0 &lt;= roi.x &amp;&amp; 0 &lt;= roi.width &amp;&amp; roi.x + roi.width &lt;= m.cols &amp;&amp; 0 &lt;= roi.y &amp;&amp; 0 &lt;= roi.height &amp;&amp; roi.y + roi.height &lt;= m.rows in function Mat
  </code></pre>
  
  <p>I leave the code Bellow :</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;iostream&gt;
  #include &lt;opencv2/highgui/highgui.hpp&gt;
  #include &lt;opencv2/core/core.hpp&gt;
  #include &lt;opencv2/imgproc/imgproc.hpp&gt;
  
  
  using namespace std;
  using namespace cv;
  
  Mat         iOrig;                          //imagen que se analizara
  Mat         patron;                         //patron buscado
  Point       corner1,corner2;                //esquinas del ROI
  bool        tresholdpass;                   //boolean returned by comparar()
  Rect        box;                            //rectangulo usado para crear el ROI
  float       porcentaje;                     //distancia a recorrer que sera dada por el tamano de la imagen muestra para el patron
  float       treshold;                       //treshold que debera ser superado para que se considere similar o igual al patron
  float       valpx;                          //valor almacenado en el pixel comparado
  float       contTreshold;                   //contador a comparar contra el porcentaje requerido para considerarse como patron encontrado
  float       totpxpat;                       //cantidad de pixeles de la imagen muestra del patron
  float       porctreshold;                   //porcentaje representativo para considerar que se encontro el patron en esa ROI
  
  bool comparar(Mat region, Mat patron){
  
      int i=0;
      int j=0;
      contTreshold=0;
  
      for (i=0;i&lt;patron.cols;i++){
          for (j=0;j&lt;patron.rows;j++){
              Point a(i,j);
              if(abs(region.at&lt;float&gt;(a))==abs(patron.at&lt;float&gt;(a))){
              //se compara el contenido de el ROI y el patron en un punto
                  contTreshold++;             //en caso de ser cierto, el contador aumenta en 1
              }
          }
  
      }
      totpxpat = patron.rows*patron.cols;     //se cuentan la cantidad de pixeles dado columnas*renglones
      porctreshold = 0.8;                     //el porcentaje que se usara para el treshold
      treshold = totpxpat * porctreshold;     //el treshold que determinara si se cumple el porcentaje de la imagen
                                          //para saber si cumple el patron o no, en caso de q se supere, retornara verdadero
                                          //en caso de que no se supere retornara falso y se elegira otro ROI para analizar
      if (contTreshold&gt;treshold){
          return true;
      }else{
          return false;
      }
  }
  
  int main() {
  
      namedWindow("imagen");
      namedWindow("segmento");
  
      iOrig = imread( "/home/diego/Downloads/figuras.jpg",CV_LOAD_IMAGE_GRAYSCALE );
      patron = imread("/home/diego/Downloads/patron.jpg",CV_LOAD_IMAGE_GRAYSCALE);
  
      imshow("imagen",iOrig);
      imshow("segmento",patron);
      corner1.x = 1;
      corner1.y = 1;
      corner2.x = patron.cols;
      corner2.y = patron.rows;
  
  
      porcentaje = (int)patron.cols * 0.05;
  
      while (corner2.x&lt;iOrig.rows-(patron.rows*2)){
          while(corner2.y&lt;iOrig.cols-(patron.cols*2)){
              box.width = abs (corner1.x-corner2.x)+1;
              box.height = abs (corner1.y - corner2.y)+1;
              box.x = min(corner1.x, corner2.x);
              box.y = min(corner1.y, corner2.y);
  
  
          //se crea una imagen de la region de interes seleccionada apartir de las 2 esquinas de la ROI
              Mat     region(iOrig,box);              //region de interes que sera comparada
  
          //se manda a comparar el ROI con el patron
              tresholdpass=comparar(region,patron);
              if (tresholdpass == true){
                  Mat local_img = iOrig.clone();
                  rectangle(local_img,corner1,corner2,Scalar(0,0,255));
                  imshow("imagen",local_img);
  
              }
              corner1.x+=porcentaje;
              corner2.x+=porcentaje;
          }
          corner1.y+=porcentaje;
          corner2.y+=porcentaje;
      }
  
      while (char(waitKey(1))!= 'q'){}
      return 0;
  }
  </code></pre>
  
  <p>I cant upload the images im using because of the reputation... but the original image is 800 x 450 and the template searched in the image is 131 x 132 </p>
  
  <p>sorry about the comments in my code being in Spanish, English is not my native language as you have guessed by now, i really don't know where my mistake is but... I hope it is simple thank you in advance!</p>