1

我基本上想知道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]
4

2 回答 2

2

当然,该函数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;
于 2015-04-17T08:36:59.263 回答
1

我在 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(您的阈值)的像素设置的值。

如果您有签名数据类型,则该方法将完全相同:)

于 2015-04-17T07:00:37.287 回答