32 #include <opencv2/imgproc/imgproc.hpp>    38     const cv::Mat& alpha1,
    40     const cv::Mat& alpha2)
    42   int out_type = src1.type();
    43   cv::Mat s1, s2, a1, a2;
    44   alpha1.convertTo(a1, CV_32F);
    45   alpha2.convertTo(a2, CV_32F);
    46   src1.convertTo(s1, CV_32F);
    47   src2.convertTo(s2, CV_32F);
    49   cv::divide(a1, a1 + a2, w1);
    50   cv::Mat w2 = -w1 + 1.0;
    52   cv::Mat blended = s1.mul(w1) + s2.mul(w2);
    54   blended.convertTo(blended_out, out_type);
    59     const cv::Mat& overlay,
    63   alpha = std::min(1.0, alpha);
    64   alpha = std::max(0.0, alpha);
    66   cv::addWeighted(overlay, alpha, base, 1.0 - alpha, 0, blended);
    73     const cv::Scalar& color,
    76   alpha = std::min(1.0, alpha);
    77   alpha = std::max(0.0, alpha);
    79   cv::Size size = src.size();
    82   if (src.type() == CV_8U)
    84     cv::cvtColor(src, color_image, cv::COLOR_GRAY2BGR);
    86   else if (src.type() == CV_32F || src.type() == CV_16U)
    89     src.convertTo(tmp, CV_8U);
    90     cv::cvtColor(tmp, color_image, cv::COLOR_GRAY2BGR);
    92   else if (src.type() == CV_32FC3 || src.type() == CV_16UC3)
    94     src.convertTo(color_image, CV_8UC3);
    96   else if (src.type() != CV_8UC3)
   106   cv::Mat overlay(size, CV_8UC3);
   107   overlay.setTo(color);
   110   cv::Mat overlay_alpha = cv::Mat::zeros(size, CV_32F);
   111   overlay_alpha.setTo(alpha, mask);
   114   cv::Mat base_alpha(size, CV_32F);
   115   base_alpha = 1.0 - alpha;
 cv::Mat blend(const cv::Mat &src1, const cv::Mat &alpha1, const cv::Mat &src2, const cv::Mat &alpha2)
cv::Mat overlayColor(const cv::Mat &src, const cv::Mat &mask, const cv::Scalar &color, double alpha)