элемент данных cv::Mat
на самом деле uchar*
, а не char*
независимо от фактического типа матрицы (т. Е. CV_8U
), Полагаю, вы печатаете значения, перебирая kernel.data
без приведения данных от uchar*
к char*
(или проверки их с помощью часов, не делая того же самого), и поэтому вы не можете видеть отрицательное число.
Кроме того, у вас есть более приятный синтаксис для достижения того же
cv::Mat kernel = (cv::Mat_<char>(1,3) << -1, 0, -1);