gpt4 book ai didi

merge - OpenCV 中的 Alpha channel

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:12 25 4
gpt4 key购买 nike

OpenCV 支持 alpha channel 吗?或者有什么方法可以使用透明 png 吗?我需要合并两个图像,其中第一个是背景,第二个是由 cvWarpAffine 旋转的图像。我可以通过一个接一个地合并像素并省略具有某些值的像素来做到这一点,这是我在 cvWarpAffine 的 cvScalar 中设置的。但是,我认为这不是预期的解决方案。感谢建议

最佳答案

更新的答案:使用 CV_LOAD_IMAGE_UNCHANGED 标志从图像加载所有四个 channel (包括 Alpha)。然后,使用 mixChannels() 和/或 split() 将 alpha channel 与其他 channel 分开,并对其设置阈值,如下所述。

非常古老的答案:

OpenCV 不支持 alpha channel ,只支持 mask 。如果你想读取带有 alpha 的 PNG,首先使用 imagemagick 来提取 alpha channel :

convert input.png -channel Alpha -negate -separate input-mask.png

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

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

... 获得真实掩码(可用作 OpenCV 操作中的掩码矩阵)。或者您可以在您自己的操作中使用它而无需设置阈值。要应用蒙版,将其扩展到三个 channel 也是一个好主意:

std::vector<Mat> marr(3, mask);
Mat_<Vec<float, 3> > maskRGB;
merge(marr, maskRGB);

之后你可以这样测试它:

imshow("Target", target);
imshow("Mask", mask*255);
imshow("Applied", target.mul(maskRGB));
waitKey();

注意:这是 OpenCV 2.0 代码。

关于merge - OpenCV 中的 Alpha channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1451021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com