Как решить ошибку сбоя утверждения Mat RIO

#image #opencv #image-processing #mat #image-thresholding

#изображение #opencv #обработка изображений #мат #изображение-пороговое значение

Вопрос:

Я получаю сообщение об ошибке со следующим кодом, где «src» — это серое изображение —

 applyLocalThresh(cv::Mat amp;src, cv::Matamp; out){
  double maxVal, minVal;
  cv::Mat output;
  int top, bottom, left , right;
  int borderType = cv::BORDER_CONSTANT;
  cv::Scalar value;
  top = (int) (9); bottom = (int) (9);
  left = (int) (9); right = (int) (9);
  output = src;
  out = src;
  value = 0;
  cv::copyMakeBorder(src,output,top,bottom,left,right,borderType,value);

  for(int y = 9; y < src.rows; y  ) {

    for(int x = 9; x < src.cols; x   ) {

            cv::Mat ROI = src(cv::Rect(cv::Point(x-4,y-4),cv::Size(9,9)));
            cv::minMaxLoc(ROI,amp;minVal,amp;maxVal);

    if(src.at<uchar>(cv::Point(x-4,y-4)) >= 0.6*maxVal){

        out.at<uchar>(cv::Point(x-4,y-4)) = 255;
    }else{
    out.at<uchar>(cv::Point(x-4,y-4));

    }
  }
 }
}
 

Это показывает мне следующую ошибку:

 OpenCV: terminate handler is called! The last OpenCV error is:
OpenCV(4.3.0) Error: Assertion failed (0 <= roi.x amp;amp; 0 <= roi.width amp;amp; roi.x   roi.width <= m.cols amp;amp; 
0 <= roi.y amp;amp; 0 <= roi.height amp;amp; roi.y   roi.height <= m.rows) in Mat, file 
C:OpenCVopencvsourcesmodulescoresrcmatrix.cpp, line 466
 

Теперь я точно не знаю, в чем проблема и как ее решить.

Комментарии:

1. Я бы порекомендовал вам проверить некоторый пример кода / учебника opencv-srf.com/p/introduction.html . Вы также можете извлечь образцы из исходного кода в каталоге sample / cpp.

2. ваш ROI отсутствует на изображении справа и внизу, проверьте индексы в циклах for