用OpenCV随意写的对图像的处理3

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







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值