C++ OpenCV:如何设置像素的alpha透明度

C++ OpenCV:如何设置像素的alpha透明度,c++,opencv,visualization,C++,Opencv,Visualization,我有一个图像,我正试图通过将每个像素涂成红色、绿色或蓝色来分割。我计算了每个像素的置信度得分,并希望调整像素的alpha透明度以反映置信度,即低置信度意味着几乎透明。在OpenCV中有没有这样做的方法?如果没有,谁能推荐一个微创库(C++) 我曾尝试使用奥雷利厄斯建议的4通道8位Mat,代码如下: cv::Mat m = cv::Mat(20,20, CV_8UC4); for(int i = 0; i < m.rows; i++){ for(int j = 0;

我有一个图像,我正试图通过将每个像素涂成红色、绿色或蓝色来分割。我计算了每个像素的置信度得分,并希望调整像素的alpha透明度以反映置信度,即低置信度意味着几乎透明。在OpenCV中有没有这样做的方法?如果没有,谁能推荐一个微创库(C++)

我曾尝试使用奥雷利厄斯建议的4通道8位
Mat
,代码如下:

cv::Mat m = cv::Mat(20,20, CV_8UC4);
    for(int i = 0; i < m.rows; i++){
        for(int j = 0; j < m.cols; j++){
            Vec4b& v = m.at<Vec4b>(i,j);
            v[0] = 255;
            v[1] = 0;
            v[2] = 0;
            v[3] = 0.5;
        }
    }

    imwrite("alpha.png", m);
    namedWindow("m");
    imshow("m", m);
    waitKey(0);
cv::Mat m=cv::Mat(20,20,cv_8UC4);
对于(int i=0;i

显示的图像是全蓝色的(没有透明度),而图像是完全透明的。

有很多方法可以做到这一点。一种可能的方法是访问和修改每个像素。假设
image
是一个四通道、8位
cv::Mat

auto& pixel = image.at<cv::Vec4b>(i,j);
pixel[3] = confidence;
变成

v[3] = 0.5 * 255;

我也有同样的问题,但当我画透明形状并通过混合图像来解决它时。 我在OpenCV的文档中已经提到了这一点

if you want to paint semi-transparent shapes, you can paint them in a separate buffer and then blend it with the main image.
为此,我建议您阅读一篇文档文章。希望这会有所帮助

if you want to paint semi-transparent shapes, you can paint them in a separate buffer and then blend it with the main image.