Вы запрашиваете пиксель (j, i), который не существует. Это не было бы ошибкой в квадратном изображении (где число строк = количество столбцов), но вы используете прямоугольное изображение.
Функция Mat :: at имеет несколько прототипов, два из которых вас интересуют:
C++: template<typename T> T& Mat::at(int i, int j)
C++: template<typename T> T& Mat::at(Point pt)
Документация для Mat :: at гласит, что точка pt определена как позиция элемента, указанная как точка (j, i), поэтому вы эффективно поменялись местами в строках и столбцах.
Причина, по которой это происходит, состоит в том, что изображение хранится в одномерном массиве пикселей, и для получения пикселя точка (r, c) переводится в p = r * image.cols + c;