搞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;
}
结果