哪个是在opencv中进行alpha掩码的最有效方法?

X''*_*X'' 7 optimization performance opencv

我知道OpenCV只支持二进制掩码.
但我需要做一个叠加,我有一个灰度蒙版,指定叠加的透明度.

例如.如果掩模中的像素为50%白色,则应表示cv::addWeighted该像素的操作,其中alpha = beta = 0.5,gamma = 0.0.

现在,如果没有opencv库函数,你会建议哪种算法效率最高?

X''*_*X'' 5

我做了类似的事情来修复.

typedef double Mask_value_t;
typedef Mat_<Mask_value_t> Mask;
void cv::addMasked(const Mat& src1, const Mat& src2, const Mask& mask, Mat& dst)
{
  MatConstIterator_<Vec3b> it1 = src1.begin<Vec3b>(), it1_end = src1.end<Vec3b>(); 
  MatConstIterator_<Vec3b> it2 = src2.begin<Vec3b>();
  MatConstIterator_<Mask_value_t> mask_it = mask.begin();
  MatIterator_<Vec3b> dst_it = dst.begin<Vec3b>();

  for(; it1 != it1_end; ++it1, ++it2, ++mask_it, ++dst_it)
    *dst_it = (*it1) * (1.0-*mask_it) + (*it2) * (*mask_it);
}
Run Code Online (Sandbox Code Playgroud)

我没有使用断言优化也没有使这个代码安全.
工作假设:所有Mat和Mask都是相同的大小,Mat是正常的三通道彩色图像.