在opencv中创建透明图像

问题描述 投票:0回答:1

我试图像在this中那样在x,y和z轴上旋转图像。旋转时不应该裁剪图像所以我正在做this

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());

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

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

但输出图像是outputimage

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

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

c++ opencv image-processing
1个回答
3
投票

问题是,您的输入图像是CV_8UC3类型,但您需要使用CV_8UC4来使用Alpha通道。因此在创建新垫之前尝试qrcxswpoi或src的cvtColor

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

  1. 使用Mat targetMat(newHeight, newWidth, CV_8UC4, cv::Scalar(0,0,0,0));(并调整后面的代码使用4通道矩阵 - cv :: Vec4b而不是cv :: Vec3b等)
  2. 如果您的输入文件是带有alpha通道的.png,您可以使用CV_LOAD_IMAGE_ANYDEPTH(希望这是正确的)标志将其加载为cv::cvtColor(src, src, CV_BGR2BGRA)图像(也可能是16位)并使用原始alpha值。
© www.soinside.com 2019 - 2024. All rights reserved.