从两个cv :: Mat和一个掩码

时间:2016-01-21 09:38:41

标签: c++ opencv

我有两个(相同大小,相同类型)cv:Mat让我们称之为 A,B 。我还有另一个cv::Mat这是一个掩码(0和1值或者其他,0和255也适用)让我们称之为 M

我需要构建一个新的cv::Mat C ),其类型和大小与 A B 相同。 C cv::Mat的值如下:

C(x,y) = A(x,y) if  M(x,y)==1
C(x,y) = B(x,y) if M(x,y)==0

我现在正在做的简单解决方案是迭代 M 并分支其值并将 C 分配给正确的值。但是,有更好的方法吗? OpenCV准备好了哪一个?

1 个答案:

答案 0 :(得分:2)

我建议你分两步完成:

cv::Mat C(A.rows, A.cols, A.type());
// copy A in C where M != 0
A.copyTo(C, M);
// copy B in C where M == 0
B.copyTo(C, 255 - M);

修改

Micka是否指出了更好的表现

// start from B
cv::Mat C = B.clone();

// copy B in C where M == 0
A.copyTo(C, M);