美文网首页
iOS-OpenCV图像混合

iOS-OpenCV图像混合

作者: 沙琪玛dd | 来源:发表于2016-11-04 10:54 被阅读118次
  • OpenCV处理图像混合主要是根据线性混合函数,通过在0到1范围内改变α的值,使两幅图像或者视频产生在时间上的画面叠化得效果。实际上α和β的和不一定为1,只是为了防止图像出现过饱和的现象。


    线性公式.png
  • 在以上公式中,f1(x)和f2(x)分别代表两张图片的矩阵,α和β表示两张图片的权重。这里要注意一点就是因为我们要对两张图片求和,所以它们必须是相同的尺寸和类型

  • 通过函数addWeighted可以方便地实现生成最终图像g(x)的功能,如下
    addWeighted(pictureMatA,alpha,pictureMatB,beta,0.0,resultMat);
    该函数进行了如下的计算,result = alphapictureMatA + betapictureMatB + gama,在以上公式中,gama为0.0,该参数主要起到了一个微调的作用。

code:

- (void)viewDidLoad {
    [super viewDidLoad];
    CGRect rect = [UIScreen mainScreen].bounds;
    self.imgView.frame = rect;
    
    UIImage *image1 = [UIImage imageNamed:@"dog.jpg"];
    UIImageToMat(image1, PictureMatA);
    
    UIImage *image2 = [UIImage imageNamed:@"dog2.png"];
    UIImageToMat(image2, PictureMatB);
    
    double t = (double)getTickCount();
    blending(PictureMatA, PictureMatB, resultPictureMat);
    
    t = ((double)getTickCount() - t)/getTickFrequency();
    cout<< "--------------cost:" << t <<" seconds-----------------" <<endl;
    
    self.imgView.image = MatToUIImage(resultPictureMat);
        
    // Do any additional setup after loading the view, typically from a nib.
}

void blending (const Mat& pictureA ,const Mat& pictureB, Mat& resultPicture)
{
        float alpha = 0.2f,beta;
        beta = 0.8;
        addWeighted(pictureA, alpha, pictureB, beta, 0.0, resultPicture);
}
dog+dog2.png

相关文章

网友评论

      本文标题:iOS-OpenCV图像混合

      本文链接:https://www.haomeiwen.com/subject/nzwiuttx.html