Существует неясная проблема при масштабировании и вычитании изображения с использованием OpenCV 3 C ++ - PullRequest
0 голосов
/ 25 февраля 2019

Итак, я сгенерировал двоичное изображение в формате JPEG, как показано здесь:

enter image description here

, поскольку я знаю, что это изображение имеет либо 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);
    }
}

здесь: enter image description here

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

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

1-Что происходит за кулисами?Я не понимаю, как здесь работают арифметические операции !!

2 - как гарантировать, что мое изображение имеет только 1 и 0 или только 0 и 255?

3 - когда я и этот двоичный файлмаскируя исходное изображение, чтобы скрыть фон, я получаю среднее изображение правильно, но тело бутылки имеет больше колебаний и случайную пикселизацию в середине, и даже фильтр Гаусса плохо сглаживается.Я думал, что у функции anding есть другой способ работы?

...