OpenCV圆遮罩抗锯齿

OpenCV圆遮罩抗锯齿,opencv,Opencv,我正在尝试使用OpenCV将两个图像叠加在一起 输入1背景(b.jpg): 输入2前景(f.jpg): 期望输出: 实际产出: 其想法是将前景的圆形部分覆盖到背景上 我正在使用代码: Mat background=imread(“b.jpg”); Mat前台=imread(“f.jpg”); Mat掩码{foreground.size(),foreground.type(),Scalar::all(0)}; 圆(掩码,点{foreground.cols/2,foreground.rows

我正在尝试使用OpenCV将两个图像叠加在一起

输入1背景(b.jpg):

输入2前景(f.jpg):

期望输出:

实际产出:

其想法是将前景的圆形部分覆盖到背景上

我正在使用代码:

Mat background=imread(“b.jpg”);
Mat前台=imread(“f.jpg”);
Mat掩码{foreground.size(),foreground.type(),Scalar::all(0)};
圆(掩码,点{foreground.cols/2,foreground.rows/2},foreground.cols/2-10,Scalar::all(255),-1,CV_AA);
imwrite(“mask.jpg”,mask);
前台.copyTo(后台、掩码);
imwrite(“overlay.jpg”,背景);
对于面具本身,我可以看到一个完美的圆圈画非常光滑的边缘

但只要我用圆形面具给copyTo打电话。生成的图像具有突然的边缘,并且抗锯齿部分似乎完全丢失


有没有一种方法可以让复制者尊重抗锯齿的事实?或者有更简单的方法实现相同的输出?

尝试用bmp而不是jpg保存?谢谢@Ema,但bmp没有帮助。您看到的平滑图像是灰度图像。如果放大圆的周长,将在白色像素之间看到灰色像素,使圆看起来平滑。根据定义,掩码是二进制的。灰色像素不用于平滑边缘的外观。您无法使用简单的二进制图像执行您试图执行的操作。然而,根据您的源图像,您可能能够使用alpha混合获得不错的效果。受@Biker评论的启发,通过向输入图像添加alpha通道,图像变得更加平滑。