我正在尝试像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));
那么我必须做些什么改变?
答案 0 :(得分:3)
问题是,您的输入图片类型为CV_8UC3
,但您需要CV_8UC4
才能使用Alpha通道。因此在创建新mat之前尝试Mat targetMat(newHeight, newWidth, CV_8UC4, cv::Scalar(0,0,0,0));
或src的cvtColor
要使用原始图像,有两种可能性:
使用cv::cvtColor(src, src, CV_BGR2BGRA)
(并调整以后的代码以使用4通道矩阵 - cv :: Vec4b而不是cv :: Vec3b等)
如果您的输入文件是带有Alpha通道的.png,您可以使用CV_LOAD_IMAGE_ANYDEPTH(希望这是正确的)标志将其加载为CV_xxC4
图像(也可能是16位)并且使用原始的alpha值。