<0, 65535> ---> <0,255> pixel by pixel so probably not the fastest for(int r = 0; r < rows; r++) { for(int c = 0; c < rows; r++) { uchar_data[r][c] = (uchar)( (uint16_data[r][c] - (uint16_data[r][c]%256) )/256 ); } }