最近一直沉迷于SSE方面的優(yōu)化,實(shí)在找不到想學(xué)習(xí)的參考資料了,就拿個(gè)筆記本放在腿上翻翻OpenCv的源代碼,無(wú)意中看到了OpenCv中關(guān)于積分圖的代碼,仔細(xì)研習(xí)了一番,覺得OpenCv對(duì)SSE的靈活運(yùn)用真的做的很好,這里記錄下我對(duì)該段代碼的品味并將其思路擴(kuò)展到其他通道數(shù)的圖像。

     該核心代碼位于:Opencv 3.0\opencv\sources\modules\imgproc\src\sumpixels.cpp文件中。

     我們貼出最感興趣的一部分代碼以便分析:

萬(wàn)碼學(xué)堂,電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

    bool operator()(const uchar * src, size_t _srcstep,int * sum, size_t _sumstep,double * sqsum, size_t, int * tilted, size_t,Size size, int cn) const
    {        if (sqsum || tilted || cn != 1 || !haveSSE2) return false;        // the first iteration
        memset(sum, 0, (size.width + 1) * sizeof(int));
        __m128i v_zero = _mm_setzero_si128(), prev = v_zero;        int j = 0;        // the others
        for (int i = 0; i < size.height; ++i)
     &nbs