Перейти к содержимому
Compvision.ru
Igisid

Как правильно наложить изображение с прозрачностью

Recommended Posts

Везде примеры на python. Мне нужно реализовать на С++. Сейчас делаю так:

 

    cv::Rect r(center, cv::Size(size.width, size.height));

    std::vector<cv::Mat> matChannels;
    cv::split(texture, matChannels);

    auto overlay_mask = matChannels[3];

    cv::Mat overlay_img;
    cv::cvtColor(texture, overlay_img, CV_BGRA2BGR);

    cv::Mat background_mask = 255 - overlay_mask;

    cv::cvtColor(overlay_mask, overlay_mask, CV_GRAY2BGR);
    cv::cvtColor(background_mask, background_mask, CV_GRAY2BGR);

    background_mask.convertTo(background_mask, CV_32FC3, 1.0/255);
    overlay_img.convertTo(overlay_img, CV_32FC3, 1.0/255);
    overlay_mask.convertTo(overlay_mask, CV_32FC3, 1.0/255);

    cv::multiply(overlay_img, overlay_mask, overlay_img);

    cv::multiply(background_mask, captured_image(r), captured_image(r));

    cv::addWeighted(captured_image(r), 1, overlay_img, 0, 0, captured_image(r));

Пробовал другими методами, но наложенное изображение либо с белым фоном или черное. Буду благодарен за помощь

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Казалось бы так:

cv::Mat Mix = img1 * 0.2 + img2 * 0.8;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×