Проверка, является ли пиксель черным в изображении в оттенках серого (OpenCV)

Мне нужно выяснить, является ли какой-либо данный пиксель черным или белым на изображении в градациях серого, которое я перед этим использовал с помощью алгоритма порога. Изображение становится в основном каплями черного цвета на белом фоне.

Mat falsetest;

...

cv::cvtColor(detected_edges, falsetest, CV_BGR2GRAY);
threshold(falsetest, falsetest,128, 255,THRESH_BINARY);

...

printf("x:%d y:%d %d\n",x,y,falsetest.at<uchar>(x,y));

Я ожидал, что результаты будут либо 0, либо 255, однако это не так. Вывод для разных пикселей выглядит примерно так:

x:1259 y:175 111
x:1243 y:189 184
x:1229 y:969 203
x:293 y:619 255
x:1123 y:339 183

Я пытаюсь сделать это неправильно, или кажется, что ошибка лежит в другом месте?

1

Решение

Вы уверены, что falsetest содержит пиксели uchar, а не плавает? В таком случае вам необходимо получить доступ к значениям falsetest от:

falsetest.at<float>(x,y)
1

Другие решения

CV код выглядит хорошо. Тем не менее, вы используете% d в printf для отображения uchar.

Либо используйте% hhd, либо делайте

static_cast<int>(falsetest.at<uchar>(x,y)).
0

Я наконец понял, в чем проблема. Я думал, что когда я позвонил

cv::cvtColor(detected_edges, falsetest, CV_BGR2GRAY);

все данные матрицы были скопированы в falsetest. Однако, похоже, что это был не тот случай, и когда я приступил к изменению connected_edges, falsetest также стал зараженным. Клонирование матрицы решило проблему.

0
По вопросам рекламы [email protected]