美文网首页
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