在opencv中创建透明图像

Nee*_*raj 2 c++ opencv image-processing

我正在尝试在 x、y 和 z 轴上旋转图像,如下所示。旋转时不应裁剪图像所以我正在这样做

Mat src = imread("path");
int diagonal = (int)sqrt(src.cols*src.cols+src.rows*src.rows);
int newWidth = diagonal;
int newHeight =diagonal;

Mat targetMat(newWidth, newHeight, src.type());
Run Code Online (Sandbox Code Playgroud)

我正在创建一个更大的图像 targetMat。输入图像是 png 图像。但我希望这个图像是透明图像。所以我尝试了这个

Mat targetMat(newWidth, newHeight, src.type(), cv::Scalar(0,0,0,0));

但输出图像是输出图像

我需要的是透明图像(透明图片在这里)

那么我需要做什么改变呢?

Mic*_*cka 5

问题是,您的输入图像是类型CV_8UC3,但您需要CV_8UC4使用 Alpha 通道。因此,Mat targetMat(newHeight, newWidth, CV_8UC4, cv::Scalar(0,0,0,0));在创建新垫子之前尝试 src 的 cvtColor

要使用原始图像,有两种可能性:

  1. 使用cv::cvtColor(src, src, CV_BGR2BGRA)(并调整后面的代码以使用 4 通道矩阵 - cv::Vec4b 而不是 cv::Vec3b 等)

  2. 如果您的输入文件是带有 alpha 通道的 .png,您可以使用 CV_LOAD_IMAGE_ANYDEPTH (希望这是正确的)标志将其加载为图像CV_xxC4(也可能是 16 位)并使用原始 alpha 值。