У меня есть два изображения, которые я вычитание друг от друга довольно просто:Предотвращение потери информации о вычитании изображения
Mat foo, a, b;
...//imread onto a and b or somesuch
foo = a - b;
Теперь, как я понимаю, любое значение пикселя, который переходит в негативов (или более 255 для это значение) вместо этого будет установлено на ноль. Если это так, я хотел бы знать, есть ли способ разрешить ему идти до нуля, чтобы я мог настроить изображение позже без потери информации.
Я работаю с изображениями в оттенках серого, если это упрощает вещи.
вы можете использовать ':: резюме absDiff' функции или вы можете преобразовать в знаковый тип данных (например,' CV_16S') и получить отрицательные значения тоже. – Micka
Звучит достаточно хорошо. Как мне изменить с 8UC1 на 16SC1 (например) и обратно? Или я могу использовать imwrite() без преобразования матрицы обратно в CV_8UC1? Если да, то что происходит с отрицательными значениями, когда я использую imwrite? Хотя я, вероятно, сначала отредактирую изображение. –
попробуйте 'yourMat.convertTo (...)' для преобразования в другой тип. При преобразовании в более ограниченный тип вы можете использовать альфа-и бета-параметры в соответствии с типом limites, иначе будет использоваться заливка насыщенности. http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-convertto Вы можете использовать 'imshow', а значение afaik 0 будет отображаться серым для подписанных типов. Не уверен, что вы можете напрямую использовать 'imwrite', документация говорит, что вы можете использовать только типы' 8U' и '16U', и если они будут работать, вероятно, будет некоторое неинтуитивное преобразование/масштабирование/перевод ваших цветов. Я скоро напишу ответ. – Micka