另外这个灰度化的代码也有优化的余地,例如:
temp = (byte)(0.299 * ptr[2] + 0.587 * ptr[1] + 0.114 * ptr[0]);
这样会当成double双精度来计算,结果再转换成byte,效率比较低。
优化的方法是把0.299、0.587、0.114这些系数乘以2的N次方,比如65536,再取整来作为系数,然后以整型乘法来实现计算。当然最终的结果temp被放大了65536倍,这个除回来就是了。怎么除呢?右移16位就是了。
不过在CUDA上问题就不大,因为GPU上最多的就是单精度浮点运算单元。