有效替换cv :: UMat的m2 =(m1 == v)?

时间:2019-05-16 07:58:16

标签: c++ opencv mat

我得到以下代码(示例)来创建一个使用cv:Mat的蒙版:

int v;
cv::Mat m1; // being a submat
cv::Mat mask = (m1==v);

这些行来自python原型

mask = np.where( m1[x1:x2,y1:y2]==v, 255, 0 );

在c ++版本中,我想使用UMat代替Mat,因为这一行周围有更大的处理管道。可悲的是,在我看来,在OpenCV3.4.1中,对于cv :: UMat而言,MatExpressions(如上面的m1==v)并没有实现。正确吗?

在cv :: UMat上有可用的操作可以用来有效地模仿mask=(m1==v)以获得相同的掩码吗?
我当前的代码(从UMat转换为Mat,即从图形mem复制到主mem,然后执行cv :: Mat操作)效率不高。

使用c ++ 11,gcc5.4.0,opencv3.4.1

注意:问题不在于python和c ++版本之间的掩码中的值是否可能不同。

1 个答案:

答案 0 :(得分:0)

正如@DanMašek正确指出的,在这种情况下,ViewContact是我的朋友:

initState