How to solve Mat RIO assertion failure error

117 views Asked by At

I am getting error with the following code where 'src' is a gray image -

applyLocalThresh(cv::Mat &src, cv::Mat& 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,&minVal,&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));

    }
  }
 }
}

This shows me the following error:

OpenCV: terminate handler is called! The last OpenCV error is:
OpenCV(4.3.0) Error: Assertion failed (0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 
0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows) in Mat, file 
C:\OpenCV\opencv\sources\modules\core\src\matrix.cpp, line 466

Now I don't know exactly where is the problem and how to solve it.

0

There are 0 answers