Ваш текущий расчет,
b = input[img.step * j + i];
дает вам ширину каждой строки, умноженную на столбец, на котором вы находитесь, плюс номер текущей строки.Умножение ширины чего-либо на то, где вы находитесь на этой ширине, не даст вам ничего значимого.
Что вам действительно нужно, так это ширина строки, умноженная на номер строки, на которой вы находитесь.Это дает вам смещение первого байта этой строки.Затем вам нужно добавить смещение к первому байту триплета BGR в этой строке, которое в 3
(количество каналов) умножается на столбец, в котором вы находитесь.Оттуда вы можете получить смещения для значений BGR:
b = input[img.step * i + img.channels() * j];
Используя этот метод, значение первого красного пикселя в вашем изображении будет:
237 28 36