zoukankan      html  css  js  c++  java
  • 实验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;
    }
  • 相关阅读:
    101. Symmetric Tree(js)
    100. Same Tree(js)
    99. Recover Binary Search Tree(js)
    98. Validate Binary Search Tree(js)
    97. Interleaving String(js)
    96. Unique Binary Search Trees(js)
    95. Unique Binary Search Trees II(js)
    94. Binary Tree Inorder Traversal(js)
    93. Restore IP Addresses(js)
    92. Reverse Linked List II(js)
  • 原文地址:https://www.cnblogs.com/war1111/p/13819882.html
Copyright © 2011-2022 走看看