#include // for main() only #include // just temporarily #include using namespace icl; // utiliy function template T inline mean_val_t(const T* srcs[CHANNELS], int idx){ T accu = 0; for(unsigned int i=0;i inline icl8u mean_val_t(const icl8u* srcs[3], int idx){ return ((int)srcs[0][idx]+srcs[1][idx]+srcs[2][idx])/3; } template<> inline icl32f mean_val_t(const icl32f* srcs[3], int idx){ return ((int)srcs[0][idx]+srcs[1][idx]+srcs[2][idx])/3; } */ /// demo function computes channel mean value template void inline mean_val_t(const Img &src, Img &dst){ BENCHMARK_THIS_FUNCTION; // now: fix-sized array const T* srcs[CHANNELS]; for(int i=0;i(srcs,i); } } template void mean_val(const Img &src, Img &dst){ // adapt dst dst.setSize(src.getSize()); dst.setChannels(1); switch(src.getChannels()){ case 0: return; case 1: mean_val_t(src,dst); break; case 2: mean_val_t(src,dst); break; case 3: mean_val_t(src,dst); break; default: ERROR_LOG("unsupported!"); } } int main(){ Img8u a = cvt8u(create("parrot")); Img8u dst; for(int i=0;i<100;++i){ mean_val(a,dst); } }