OpenCV实现正片叠底

搞OpenGL的时候就接触过正片叠底,实现也简单就A乘以B,最近在搞OpenCV,发现相乘的结果不对

A图

B图

使用Core.multiply后的图片是这样的

照成这样是因为OpenCV的默认取值范围在0~255,而OpenGL的取值范围在0~1,所以OpenCV的图片相乘会出现大于255的情况,而OpenGL相乘永远都不会大于1。这是我在android开发时遇到的情况,其他环境没测试过,不太清楚。

解决方式很简单,把OpenCV的取值范围转成0~1再相乘

public static Mat cvMultiply(Mat base, Mat src){
        if(base.channels() != src.channels()){
            return null;
        }
        int baseType = base.type();
        int srcType = base.type();
        base.convertTo(base, CvType.CV_64FC4, 1.0 / 255);
        src.convertTo(src, CvType.CV_64FC4, 1.0 / 255);
        Mat dst = new Mat();
        Core.multiply(base,src,dst);
        dst.convertTo(dst, baseType, 255);
        base.convertTo(base, baseType, 255);
        src.convertTo(src, srcType, 255);
        return dst;
    }

结果

Github

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值