Mat Minfilter(Mat I, int windowsize)
{
Mat out_img(I.rows, I.cols, CV_8UC1);
int r = (windowsize-1 ) / 2;
Mat out_ex(I.rows + windowsize-1 , I.cols + windowsize-1, CV_8UC1);
copyMakeBorder(I, out_ex, r, r, r, r, BORDER_DEFAULT);
for (int i = 0; i < out_img.rows; ++i)
{
for (int j = 0; j < out_img.cols; ++j)
{//注意
Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height)
,定义一个左上角点坐标为(_x, _y)
的_width*_height
矩形窗口;在OpenCV库中,图像像素坐标与所在行列数的对应关系为:x -> col, y -> row, width -> cols, height -> rows
Rect roi(j, i, windowsize, windowsize);//i,j不可颠倒
Mat roi_of_img = out_ex(roi);
double minVal = 0, maxVal = 0;
Point minPt, maxPt;
minMaxLoc(roi_of_img, &minVal, &maxVal, &minPt, &maxPt);
out_img.at<uchar>(i, j) = minVal;
}
}
return out_img;
}
图像最小值滤波
最新推荐文章于 2023-11-25 03:02:24 发布