2014-11-10 2 views
0

В Matlab я могу использовать логическое (img) преобразование всех ненулевых элементов в один.Преобразование ненулевого значения в один

Есть ли простой способ (т. Е. Без цикла) для преобразования всех ненулевых значений, хранящихся в cv :: Mat, в один в OpenCV?

Спасибо!

+0

Вы хотите загрузить файл .mat в openCV? –

+0

Извините, что я вас обманываю. Я имею в виду cv :: Mat. – wking

+0

Думаю, вам нужно «жестко закодировать» его с помощью пары петель. –

ответ

2

Существует множество функций, которые могут вам помочь, но это зависит от того, что у вас есть и чего вы пытаетесь получить.

1) OpenCV имеет функцию compare и оператор '! =' (А также любой другой оператор, который может вам понадобиться). Вы можете написать:

img = (img != 0); 

Это будет конвертировать любое ненулевое значение матрицы до 255. Я знаю, что вы хотите, чтобы преобразовать его в 1, но если 255 достаточно хорошо для вас, чем это лучший способ. В любой задаче, с которой я столкнулся в прошлом, преобразование в 255 всегда лучше, чем преобразование в 1, потому что вы можете использовать результирующее изображение для всех видов побитовых операций, таких как логика AND, OR и т. Д.

2) Если вы это сделаете хотите сделать преобразование в 1, а ваша матрица - положительные целые числа (или символы или шорты), вы можете использовать функцию min.

img = min(img,1); 

3) Кроме того, вы можете использовать функцию threshold как предложено @Roger Rowland.

0

Вы можете использовать функцию threshold() в OpenCV для удобства. Вы упоминаете «ненулевые» элементы. Если ваша матрица имеет отрицательные числа, и вы все еще хотите, чтобы они были установлены в 1, используйте threshold(abs(my_mat), ..).

В общем, это также может быть сделано через это:

Mat my_mat; 
Mat reference = Mat::zeros(rows, cols, type); 

Mat result = (abs(my_mat) > reference)/255; 

Это больше, и, вероятно, выглядит хаотичным, но имеет то преимущество, что reference может быть отрегулирован на что-то другое, чем все нули, если это необходимо (это может быть, например, градиент). Кроме того, <не единственный оператор, который может там поместиться - любой логический оператор может быть использован. Результат логической операции всегда равен 0 или 255, следовательно, деление.

Смежные вопросы