透明图像,alpha通道和掩膜的理解

1.alpha通道的理解

alpha通道是一个单独通道,相当于一个关联表一样的东西,来定义这个像素点的透明度的属性,当只有它这一张图的时候不会有什么作用,但是当将有透明度的图片和其他的图片进行叠加的时候,透明度就能够产生它的作用了。如果一张透明的图片,则阿尔法的作用之就是0,在叠加的时候,这块区域上的图片之后又本来的颜色,而不会有它自己的颜色。alpha的作用位1的时候,就是将图片覆盖在了这块区域上。
OpenCV BGRA系统的的A是指的不透明度,数值越高,越不透明。(好像是反的,待测试)
alpha通道的功能可以通过addweight的函数进行代替。

2.OpenCV创建4通道的图片实例代码
#include <opencv2/imgcodecs.hpp>
using namespace cv;
using namespace std;

static void createAlphaMat(Mat &mat)
{
    CV_Assert(mat.channels()==4);
    for (int i = 0;i < mat.rows;++i)
    {
        for (int j = 0;j < mat.cols;++j)
        {
            Vec4b& bgra = mat.at<Vec4b>(i, j);
            bgra[0] = UCHAR_MAX; // Blue
            bgra[1] = saturate_cast<uchar>((float(mat.cols - j)) / ((float)mat.cols) * UCHAR_MAX); // Green
            bgra[2] = saturate_cast<uchar>((float(mat.rows - i)) / ((float)mat.rows) * UCHAR_MAX); // Red
            bgra[3] = saturate_cast<uchar>(0.5 * (bgra[1] + bgra[2])); // Alpha
        }
    }
}
int main()
{
    Mat mat(480, 640, CV_8UC4);
    createAlphaMat(mat);
    vector<int> compression_params;
    compression_params.push_back(IMWRITE_PNG_COMPRESSION);
    compression_params.push_back(9);

    bool result = false;
    try {
        result = imwrite("alpha.png",mat,compression_params);
    }
    catch (const cv :: Exception& ex)
    {
        fprintf(stderr, "Exception converting image to PNG format:%s\n", ex.what());
    }
    if (result)
        printf("Saved PNG file with alpha data.\n");
    else
        printf("ERROR: Can't save PNG file.\n");
    return result ? 0 : 1;
 }
3.掩膜

在OpenCV中有这样的一个借口函数

Mat::copyto(dst,mask);
//其中掩膜一般读取的原图像的单通道,这样在mask矩阵中只有0和非零两种数,其中0表示的是黑色。
这是官方的解释:Operation mask of the same size as *this. Its non-zero elements indicate which matrix elements need to be copied. The mask has to be of type CV_8U and can have 1 or multiple channels.
意思大概是只有非零部分的内容会被复制,零的部分还是Mat原来的内容。

1.通过掩膜,我们可以自己进行掩膜的设计,然后将掩膜和源图像进行运算(两个矩阵内的元素对应未知进行与运算或者乘运算),来获取自己需要的图片
2.通过掩膜矩阵,进行加权运算来重新获得每个像素点的额值,以此来进行一些滤波等操作。

猜你喜欢

转载自blog.csdn.net/bookwormsmallman/article/details/81451011