1. 程式人生 > >[C++]opencv 裏計算多項式用的算式...

[C++]opencv 裏計算多項式用的算式...

spa sin enc cout ble str 別了 沒有 esp

初看OpenCV寫多項式的算式有點晦澀難懂,形如(((z3y2 + z2)y2+z1)*y2)來表示一個二次到六次的偶次多項式,這樣的算式究竟快在哪裏?今天正好比較閑,就拿來跑一跑,供大家參考(但其實意義不大),代碼如下所示:

#include<iostream>
#include<time.h>
using namespace std;
int main(){
    clock_t t1,t2;
    t1 = clock();
    double x = 1.2,y = 1.2, x2, y2, k1, k2;
    double z1 = 0.98345,z2 = 0.32355,z3 = 0.22234;
    for(int i = 0;i < 10000000;i++,x+=1.0){
        x2 = x*x;
        k1 = 1 + (z1*x2 + z2*x2*x2 + z3*x2*x2*x2);
        //k1 = 1 + (((x2 + 1)*x2+1)*x2);
    }
    t2 = clock();
    cout<<(int)(t2-t1)<<endl;
    t1 = clock();
    for(int i = 0; i < 10000000;i++,y+=1.0){
        y2 = y*y;
        //k2 = 1 + (y2 + y2*y2 + y2*y2*y2);//如果沒有系數,這個會更快
            k2 = 1 + (((z3*y2 + z2)*y2+z1)*y2);// to compute polynomial
    }
    t2 = clock();
    //cout<<(int)t2<<endl;
    cout<<(int)(t2-t1)<<endl;
}

結果分別如下所示,單位是 clock

265
234

並且,如果沒有系數,會比正常計算還要慢。而且這以經是一千萬級別了,一半圖像大小基本也是這個級數的,才快三十個時鐘,基本上要幾千張圖才有微小的加速感知...好吧,確實是快了,佩服佩服。

[C++]opencv 裏計算多項式用的算式...