Mat MyDilateFilter(Mat& inputMat,int oddNum){
Mat dstImg(inputMat.rows,inputMat.cols,inputMat.type());
for(int i=0;i<inputMat.rows;i++){
for(int j=0;j<inputMat.cols;j++){
int mid = oddNum/2;//size 5x5
int r = i-mid;
int c = j-mid;
uchar maxB = 0;
uchar maxG = 0;
uchar maxR = 0;
for(int x=0;x<oddNum;x++){
for(int y=0;y<oddNum;y++){
//dealing of overflow of boundary
//eq: overflow region of elements is 0(zero)!(I think)
if(r + x < 0 || c + y < 0 ||r+x > inputMat.rows-1 || c+y > inputMat.cols-1){
continue;
}
maxB = xy_max(maxB,inputMat.at<Vec3b>(r+x,c+y)[0]);
maxG = xy_max(maxG,inputMat.at<Vec3b>(r+x,c+y)[1]);
maxR = xy_max(maxR,inputMat.at<Vec3b>(r+x,c+y)[2]);
}
}
dstImg.at<Vec3b>(i,j)[0] = saturate_cast<uchar>(maxB);
dstImg.at<Vec3b>(i,j)[1] = saturate_cast<uchar>(maxG);
dstImg.at<Vec3b>(i,j)[2] = saturate_cast<uchar>(maxR);
}
}
return dstImg;
}
#include"OpenCVLib2.hpp"
using namespace cv;
int main(){
//Parameters must be the same type!
println(xy_max(2,1,4,5,22,99,11));
println(xy_min(2,1,4,5,22,99,11));
println(xy_max(22.2,33.3,2.2,3.0));
println(xy_min(22.2,33.3,2.2,3.0));
Mat img = imread("p1.jpg");
imshow("Origin",img);
Mat&& dstImg = MyDilateFilter(img,3);
imshow("3x3",dstImg);
dstImg = MyDilateFilter(img,5);
imshow("5x5",dstImg);
waitKey(0);
return 0;
}
99
1
33.3
2.2