Итак, я сгенерировал двоичное изображение в формате JPEG, как показано здесь:
, поскольку я знаю, что это изображение имеет либо 255, либо 0 значений (IНе знаю, почему в краске я нахожу несколько пикселей на краю с различными значениями, но я проигнорировал их, их так мало, и я не уверен, что они пришли из формата JPEG)
, поэтому моя цель - преобразовать этоизображение до 0x00 для темных пятен и 0x01 для светлых пятен (обратите внимание, я имею в виду 1 как единое целое, а не как 255)
for (int i = 0; i < eroded_dilated_binary.rows; i++)
{
for (int j = 0; j < eroded_dilated_binary.cols; j++)
{
pix=eroded_dilated_binary.at<char>(i, j); //pix is defined as char here
eroded_dilated_binary.at<char>(i, j) = (pix / 255);
}
}
здесь:
Я проверил вывод и получил, что все 0.но как это возможно?Я даже пытался разделить первое изображение на 2, я получил нелогичный ответ.Я даже пытался вычесть некоторое значение из каждого пикселя, но все равно получил странные значения.
Я пробовал использовать другой синтаксис, показанный в этом разделе OpenCV: какой самый простой способ разделить мат на скаляр , но он дает совершенно неправильные значения.
1-Что происходит за кулисами?Я не понимаю, как здесь работают арифметические операции !!
2 - как гарантировать, что мое изображение имеет только 1 и 0 или только 0 и 255?
3 - когда я и этот двоичный файлмаскируя исходное изображение, чтобы скрыть фон, я получаю среднее изображение правильно, но тело бутылки имеет больше колебаний и случайную пикселизацию в середине, и даже фильтр Гаусса плохо сглаживается.Я думал, что у функции anding есть другой способ работы?