实验5.1

#include <bits/stdc++.h>
#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/video.hpp"
#include "opencv2/objdetect.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/ml.hpp"
#define inf 2333333333333333
#define N 2010
#define p(a) putchar(a)
#define For(i,a,b) for(int i=a;i<=b;++i)
typedef unsigned char uchar;
//by war
//2020.10.8
using namespace std;
using namespace cv;
int alpha_slider_r=1,alpha_slider_d=1,m,cnt;
char TrackbarNamed[50],TrackbarNamer[50];
Mat image,image0,image1,new_image,boxFilterDst;
double Sum,sigma_d,sigma_r,alpha_d,alpha_r,alpha_slider_max=100,eps=1e-7;
double kel[N][N];
void in(int &x){
    int y=1;char c=getchar();x=0;
    while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
    while(c<='9'&&c>='0'){ x=(x<<1)+(x<<3)+c-'0';c=getchar();}
    x*=y;
}
void o(int x){
    if(x<0){p('-');x=-x;}
    if(x>9)o(x/10);
    p(x%10+'0');
}

void on_trackbar(int, void*){
    alpha_d = (double) alpha_slider_d/(double) 10.0;
    if(1.0/6.0 - alpha_d>eps) alpha_d=1.0/6.0;
    sigma_d=alpha_d;

    alpha_r = (double) alpha_slider_r/(double) 10.0;
    if(1.0/6.0 - alpha_r>eps) alpha_r=1.0/6.0;
    sigma_r=alpha_r;

    m=6.0*sigma_d-1;
    m+=(m%2==0);
//     copyMakeBorder(image, image0, m/2, m/2, m/2, m/2, BORDER_REFLECT);
//     new_image = Mat::zeros(image.size(), image.type());
//     For(i,0,image.rows-1)
//         For(j,0,image.cols-1)
//             For(k,0,2){
//                 cnt=0;Sum=0;
//                 For(h,i,i+m-1)
//                     For(w,j,j+m-1){
//                         kel[h][w]=exp((-1.0)/(2.0*sigma_d*sigma_d)*((h-(i+m/2))*(h-(i+m/2))+(w-(j+m/2))*(w-(j+m/2))));
//                         kel[h][w]*=exp((-1.0)/(2.0*sigma_r*sigma_r)*(image.at<Vec3b>(h,w)[k]-image.at<Vec3b>(i+m/2,j+m/2)[k])*(image.at<Vec3b>(h,w)[k]-image.at<Vec3b>(i+m/2,j+m/2)[k]));
//                         Sum+=kel[h][w];
//                     }
//                 For(h,i,i+m-1)
//                     For(w,j,j+m-1){
//                         kel[h][w]/=Sum;
//                     }
//                 Sum=0;
//                 For(h,i,i+m-1)
//                     For(w,j,j+m-1){
//                         Sum+=image0.at<Vec3b>(h,w)[k]*kel[h][w];
//                     }
//                 new_image.at<Vec3b>(i,j)[k]=Sum;
//             }
//     imshow("Contrast", new_image);
    //cout<<sigma_d<<" "<<sigma_r<<endl;
    //bilateralFilter(image, image1, m, sigma_d*10, sigma_r*10);
    //imshow("Contrast", image1);
    
    boxFilter(image, boxFilterDst, -1, cv::Size(m, m));
    imshow("Contrast", boxFilterDst);
}

signed main(){
    image = imread("/Users/war/Downloads/08.jpg");
    namedWindow("Contrast", 1);
    sprintf(TrackbarNamed, "d -> %lf", alpha_slider_max);
    sprintf(TrackbarNamer, "r -> %lf", alpha_slider_max);
    createTrackbar(TrackbarNamed, "Contrast", &alpha_slider_d, alpha_slider_max, on_trackbar);
    on_trackbar( alpha_slider_d, 0 );
    createTrackbar(TrackbarNamer, "Contrast", &alpha_slider_r, alpha_slider_max, on_trackbar);
    on_trackbar( alpha_slider_r, 0 );
    waitKey(0);
    return 0;
}

 

posted @ 2020-10-15 12:34  WeiAR  阅读(143)  评论(0编辑  收藏  举报