我正在尝试创建一个扭曲图像,其中边框填充像素是透明的。我知道我可以使用BORDER_CONSTANT = BORDER_TRANSPARENT。但这可以通过:
此外,它还提供了方法BORDER_TRANSPARENT。这意味着 目标图像中的相应像素不会 完全修改过。 openCV manual
因此,要使边框像素透明,我是否需要从透明图像开始。像这个例子:
int cols; // filled
int rows; // filled
Mat myImage; // filled
Mat warpMatrix (3, 4, CV_32FC1); // filled
Mat myWarpedImage;
myWarpedImage.create((cols, rows, CV_8UC4, Scalar(0,0,0,0)); // set all pixels to black, alpha = 0
warpPerspective(myImage, myWarpedImage, warpMatrix, Size(cols, rows), WARP_INVERSE_MAP, BORDER_TRANSPARENT);
这似乎不起作用。我的扭曲图像仍然是黑色背景,没有透明度(当我检查一些照片编辑软件,如GIMP)。
答案 0 :(得分:3)
......以及使输入图像成为四通道图像的方法是
cv::cvtColor(myImage, myImage, CV_BGR2BGRA);
答案 1 :(得分:0)
warpPerspective将目标图像设置为与源具有相同的类型。你也需要myImage成为CV_8UC4。这就是为什么myWarpedImage在操作后只有三个通道。