c++ opencv,如何在cv::Mat上添加一个指定区域的 mask ,半透明
时间: 2024-02-23 21:01:35 浏览: 214
要在cv::Mat上添加一个指定区域的 mask ,半透明,可以按照以下步骤进行:
1. 创建一个与cv::Mat大小相同的alpha通道图像,初始值为0;
2. 将指定区域的alpha通道设置为非0值,表示这个区域需要半透明;
3. 将原始图像与alpha通道图像合并,这样就可以实现半透明效果。
下面是示例代码:
```c++
cv::Mat img = cv::imread("image.jpg");
cv::Mat alpha = cv::Mat::zeros(img.size(), CV_8UC1);
// 设置指定区域的alpha通道为非0值
cv::Rect roi(100, 100, 200, 200);
alpha(roi) = 128;
// 将alpha通道转换为4通道图像
cv::Mat alpha4;
cv::cvtColor(alpha, alpha4, cv::COLOR_GRAY2BGRA);
// 合并图像和alpha通道
cv::Mat result;
cv::multiply(alpha4, img, result, 1.0 / 255.0);
// 显示结果
cv::imshow("result", result);
cv::waitKey(0);
```
在上面的代码中,我们首先读取了一张图像,然后创建一个与图像大小相同的alpha通道图像,并将指定区域的alpha通道设置为128,表示这个区域需要半透明。接着,我们将alpha通道转换为4通道图像,并使用cv::multiply函数将原始图像和alpha通道合并,最后显示结果。
阅读全文