Matlab-код эквивалентности в C ++ OpenCV

Мне в основном нравится знать эквивалент следующего кода в Matlab OpenCV с использованием C ++

MascMmax = s3> Mmax

Это сравнивает все позиции двух матриц и соответствует условию 1 и 0 в противном случае.

В opencv я обнаружил, что могу сделать, но я сохранил 255, 0. Интересно, как мне нравятся 1 и 0.

пример:

a [1,2,3]
b [2,1,4]

c = a > b

c[0,1,0]

1

Решение

Конечно, функция compare() выполняет сравнение для каждого элемента двух массивов или массива и скалярного значения.

Вы можете иметь следующие сравнения:

  • CMP_EQ src1 равно src2,
  • CMP_GT src1 больше, чем src2,
  • CMP_GE src1 Больше или равно src2,
  • CMP_LT src1 меньше чем src2,
  • CMP_LE src1 меньше или равно src2,
  • CMP_NE src1 неравен src2,

Когда результат сравнения trueсоответствующий элемент выходного массива установлен на 255. Операции сравнения могут быть заменены эквивалентными матричными выражениями:

Mat dst1 = src1 >= src2;
Mat dst2 = src1 < 8;
2

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

Я не видел такой функции в Opencv, но вы могли бы сделать следующее:

а) вычислить с как а-б, используя

addWeighted(a,1,b,-1,0,c).

addWeighted проверяет диапазоны вашего типа данных, поэтому для ваших данных 8UC1 все отрицательные значения будут сопоставлены с нулем, так что все точки с [i] <= b [i], вы будете иметь c [i] = 0, иначе c [i]> 0
б) используйте cv :: threshold, чтобы установить все положительные записи в c в фиксированное значение, в вашем случае

cv::threshold(c,0,1,THRESH_BINARY)

0 — это ваш порог, а 1 — значение, для которого установлены все пиксели со значением больше 0 (ваш порог).

Если у вас есть подписанный тип данных, подход будет работать точно так же 🙂

1

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