OpenCV支持alpha通道吗?或者有没有办法使用透明的png?我需要合并两个图像,其中第一个是背景,第二个是由cvWarpAffine旋转的图像.我可以通过逐个合并像素并省略具有某些值的像素来实现这一点,我在cvWarpAffine中的cvScalar中设置了这些值.但是,我不认为这是有意的解决方案.谢谢你的建议
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代码.
| 归档时间: |
|
| 查看次数: |
14701 次 |
| 最近记录: |