處理圖片的雙重迴圈,請先跑 height 再跑 width 會較佳如果要更快可以每次處理 32bit,或者用 SIMD Intrinsic另外之前有貼過的連結,我再分享一次給你參考觀察記憶體用量請用 procexp.exe
http://goo.gl/n7utTE搭配下 debug break point 來幫助自己釐清哪些階段增加真正要快就是用 OpenCL 或者 CUDA 來跑你的演算法CPU 跟 GPU 的差異
http://youtu.be/-P28LKWTzrI這就是 row major 讀取的好處,跟先跑 height 目的一樣假設你一個 pixel 就是 32bit 的話,每次就抓 32bitRGBA8888 轉 BGRA8888,抓 32bit 後再用 bitwise 操作SIMD 操作使用 MMX (64bit), SSE (128bit) 的 CPU 指令讓每次處理的資料量增加,請參考
http://goo.gl/KkIumm寫 Intrinsic 的好處是,是指 #include <xmmintrin.h>來操作那些 SIMD 的指令,而不用自己寫 inline assembly至於是不是要把資料從"空間域"轉"頻率域",要看問題類型影像處理有些細節要注意,row major 存取,記憶體對齊可以再上網多多查一些資料,大概如此。先跑 height 就是 row major 讀取,資料就是這樣擺放的這種存取方式可以有效的利用 cache,甚至做 prefetchOpenCV是個好選擇,要快可再搭配 Intel IPP,加油囉 :D