rou*_*tic 7 opencv alphablending image-processing emgucv
我正在使用Emgu.CV来执行一些基本的图像处理和合成.我的图片被加载为Image<Bgra,Byte>.
问题#1:当我使用该Image<,>.Add()方法时,无论alpha值如何,图像总是混合在一起.相反,我希望它们在另一个上面合成,并使用包含的alpha通道来确定图像应该如何混合.因此,如果我调用image1.Add(image2)image2中的任何完全不透明的像素将完全覆盖来自image1的像素,而半透明像素将基于alpha值进行混合.
这就是我想用视觉形式做的事情.有一个城市形象,一些"透明洞"被切掉,后面有一只青蛙.它应该是这样的:

这就是openCV产生的.

如何使用OpenCV获得此效果?它会像打电话一样快Add()吗?
问题2:有没有办法就地执行这个组合,而不是每次调用都创建一个新的图像Add()?(例如image1.AddImageInPlace(image2)修改字节 image1?)
注意:在Emgu.CV中寻找答案,我正在使用它,因为它处理透视变形的程度.
在OpenCV 2.4之前,没有支持带有alpha通道的PNG.
要验证您当前的版本是否支持它,请在加载您确定为RGBA的图像后打印通道数.如果它支持,应用程序将输出数字4,否则它将输出数字3(RGB).使用C API你会做:
IplImage* t_img = cvLoadImage(argv[1], CV_LOAD_IMAGE_UNCHANGED);
if (!t_img)
{
printf("!!! Unable to load transparent image.\n");
return -1;
}
printf("Channels: %d\n", t_img->nChannels);
Run Code Online (Sandbox Code Playgroud)
如果您无法更新OpenCV:
如果您的版本已支持带RGBA的PNG:
编辑:
| 归档时间: |
|
| 查看次数: |
9561 次 |
| 最近记录: |