从两个 cv::垫子和一个掩码构建 cv::垫子

Construct cv::Mat from two cv::Mat's and a mask

本文关键字:cv 一个 掩码 构建 垫子 两个      更新时间:2023-10-16

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

我需要构造一个新的cv::MatC),它具有与 AB 相同类型和大小。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中优化一个了吗?

我建议你分两步完成:

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);

编辑:

米卡有没有指出更好的性能

// start from B
cv::Mat C = B.clone();
// copy B in C where M == 0
A.copyTo(C, M);