Мне в основном нравится знать эквивалент следующего кода в 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]
Конечно, функция 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;
Я не видел такой функции в 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 (ваш порог).
Если у вас есть подписанный тип данных, подход будет работать точно так же 🙂