zoukankan      html  css  js  c++  java
  • 实验3.2

    #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 1000010
    #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.4
    using namespace std;
    using namespace cv;
    int T;
    Mat image0,image1,new_image;
    double w,h,eps=1e-7;
    
    struct nose{
        double x;
        double y;
        int X;
        int Y;
    }a[100];
    
    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');
    }
    
    double get_x(double x,double y){
        double r=sqrt(x*x+y*y);
        if(r-1.0>=eps) return x;
        double theta=(1.0-r)*(1.0-r);
        return cos(1.5*theta)*x;
    }
    
    double get_y(double x,double y){
        double r=sqrt(x*x+y*y);
        if(r-1.0>=eps) return y;
        double theta=(1.0-r)*(1.0-r);
        return cos(1.5*theta)*y;
    }
    
    signed main(){
        VideoCapture capture(0);
        while(1){
            capture >> image0;
            if(image0.empty())continue;
            new_image = Mat::zeros(image0.size(), image0.type());
            w=(double)image0.cols*0.5;
            h=(double)image0.rows*0.5;
            For(i,0,image0.rows-1)
                For(j,0,image0.cols-1){
                    a[0].x=(i-h)/h;a[0].y=(j-w)/w;
                    a[1].x=get_x(a[0].x,a[0].y);
                    a[1].y=get_y(a[0].x,a[0].y);
                    a[1].x=a[1].x*h+h;
                    a[1].y=a[1].y*w+w;
                    For(k,0,2){
                        auto t0=image0.at<Vec3b>(floor(a[1].x),floor(a[1].y))[k];
                        auto t1=image0.at<Vec3b>(floor(a[1].x),ceil(a[1].y))[k];
                        auto t2=image0.at<Vec3b>(ceil(a[1].x),floor(a[1].y))[k];
                        auto t3=image0.at<Vec3b>(ceil(a[1].x),ceil(a[1].y))[k];
                        auto t4=(1.0-(a[1].y-floor(a[1].y)))*t0+(a[1].y-floor(a[1].y))*t1;
                        auto t5=(1.0-(a[1].y-floor(a[1].y)))*t2+(a[1].y-floor(a[1].y))*t3;
                        auto t6=(1.0-(a[1].x-floor(a[1].x)))*t4+(a[1].x-floor(a[1].x))*t5;
                        new_image.at<Vec3b>(i, j)[k] = t6;
                    }
                }
            imshow("background", new_image);
            if(waitKey(20) == 'q') break;
        }
        capture.release();
        destroyAllWindows();
        return 0;
    }

  • 相关阅读:
    iOS-iOS调用相机调用相册【将图片保存到本地相册】
    iOS-image图片压缩
    iOS-沙盒目录
    iOS-Xcode代码统计
    Django基础之Model操作
    Django objects.all() ,objects.get() ,objects.filter()之间的区别
    django从1.7升级到1.9后 提示:RemovedInDjango110Warning
    关闭TCP中135、139、445、593、1025 等端口的操作方法 (转)(记录下)
    oracle decode函数和 sign函数
    Apache的主要目录和配置文件详解
  • 原文地址:https://www.cnblogs.com/war1111/p/13768581.html
Copyright © 2011-2022 走看看