Поиграйтесь с cv::rectangle, cv::addWeighted и cv::putText.
Вот код прямиком из рабочего проекта, рисует полупрозрачный прямоугольник и пишет строки текста:
cv::Mat writeOnImage(const cv::Mat& source, const std::vector<std::string>& lines, int width)
{
auto rect = source.clone();
cv::rectangle(rect, { 10, 10 }, { width, 20 + 50 * static_cast<int>(lines.size()) }, cv::Scalar(0, 0, 0), cv::FILLED);
auto result = cv::Mat();
cv::addWeighted(source, 0.6, rect, 0.4, 0.0, result);
for (size_t i = 0; i < lines.size(); ++i) {
cv::putText(result, lines[i], { 20, 50 + 50 * static_cast<int>(i) }, cv::FONT_HERSHEY_PLAIN, 3, cv::Scalar(10, 255, 255), 3, cv::LINE_8);
}
return result;
}