我基本上想知道matlab中以下代码与使用c ++的opencv等效
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 中没有看到这样的函数,但你可以执行以下操作:
a) 计算 c 为 ab 使用
addWeighted(a,1,b,-1,0,c).
addWeighted 检查您的数据类型的范围,因此对于您的 8UC1-Data,所有负值都将被映射到零,这样所有具有 a[i] <= b[i] 的点,您将有 c[i] = 0,否则c[i] > 0 b) 在您的情况下,使用 cv::threshold 将 c 中的所有正条目设置为固定值
cv::threshold(c,0,1,THRESH_BINARY)
0 是您的阈值,而 1 是所有大于 0(您的阈值)的像素设置的值。
如果您有签名数据类型,则该方法将完全相同:)