处理图片的双重循环,请先跑 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