• 实验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;
    }
  • 相关阅读:
    Kafka原理与java simple producer示例
    【转载】kafka的工作原理
    Python 基本类型转换
    hadooop2.6 job pending research
    记一次zookeeper集群搭建错误的排除
    Apache Drill Install and Test
    Linux或Unix环境利用符号链接升级Maven
    Android之Linearlayouy线性布局
    Effective Java Second Edition --- Builder Pattern
    java生产者/消费者模式实现——一生产者一消费者(操作值)
  • 原文地址:https://www.cnblogs.com/war1111/p/13819882.html
Copyright © 2020-2023  润新知