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));
那么我需要做什么改变呢?
问题是,您的输入图像是类型CV_8UC3,但您需要CV_8UC4使用 Alpha 通道。因此,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 值。