OpenCV中的Alpha通道

4 merge opencv alpha rotation

OpenCV支持alpha通道吗?或者有没有办法使用透明的png?我需要合并两个图像,其中第一个是背景,第二个是由cvWarpAffine旋转的图像.我可以通过逐个合并像素并省略具有某些值的像素来实现这一点,我在cvWarpAffine中的cvScalar中设置了这些值.但是,我不认为这是有意的解决方案.谢谢你的建议

ypn*_*nos 8

OpenCV不支持alpha通道,只支持屏蔽.如果你想用alpha读取PNG,首先使用imagemagick提取alpha通道:

convert input.png -channel Alpha -negate -separate input-mask.png
Run Code Online (Sandbox Code Playgroud)

然后在OpenCV中你可以这样做:

Mat_<float> mask = imread("input-mask.png", 0);
threshold(mask, mask, 254., 1., THRESH_BINARY);
Run Code Online (Sandbox Code Playgroud)

...获得一个真实的掩码(在OpenCV操作中可用作掩码矩阵).或者您可以在没有阈值处理的情况下在自己的操作中使用它.要应用蒙版,将它扩展到三个通道也是一个好主意:

std::vector<Mat> marr(3, mask);
Mat_<Vec<float, 3> > maskRGB;
merge(marr, maskRGB);
Run Code Online (Sandbox Code Playgroud)

之后你可以像这样测试它:

imshow("Target", target);
imshow("Mask", mask*255);
imshow("Applied", target.mul(maskRGB));
waitKey();
Run Code Online (Sandbox Code Playgroud)

注意:这是OpenCV 2.0代码.