CV :: UMAT的M2 =(M1 == V)的有效替换

efficient replacement for m2=(m1==v) for cv::UMat?

本文关键字:替换 有效 UMAT M2 CV M1      更新时间:2023-10-16

我得到了以下代码(示例(来创建一个使用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,因为这一行周围有更大的处理管道。可悲的是,在我看来,matexpressions(如上面的m1==v(并未对opencv3.4.1中的cv :: umat受到欺骗。这是正确的吗?

在CV :: UMAT上有可用的操作,我可以有效地模仿mask=(m1==v)以获得相同的掩码?
我当前的代码(从UMAT转换为MAT,即从Graphics Mem复制到Main Mem,然后进行CV :: MAT操作(不有效。

使用C 11,gcc5.4.0,opencv3.4.1

nb:问题不是关于Python和C 版本之间的掩码中可能不同的值。

正常指出,在这种情况下, cv::compare是我的朋友:

// having some UMat m1 and some (let's say) double v
cv::UMat mask;
cv::compare( m1, cv::Scalar{v}, mask, cv::CMP_EQ );