#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