X''*_*X'' 7 optimization performance opencv
我知道OpenCV只支持二进制掩码.
但我需要做一个叠加,我有一个灰度蒙版,指定叠加的透明度.
例如.如果掩模中的像素为50%白色,则应表示cv::addWeighted
该像素的操作,其中alpha = beta = 0.5,gamma = 0.0.
现在,如果没有opencv库函数,你会建议哪种算法效率最高?
我做了类似的事情来修复.
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是正常的三通道彩色图像.