博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java实现openCV白平衡处理以及效率提升
阅读量:2350 次
发布时间:2019-05-10

本文共 1717 字,大约阅读时间需要 5 分钟。

之前在进行openCV的白平衡处理时看到一位大佬的文章

这篇文章提出了在Java中实现openCV白平衡的处理问题一种行之有效的方法,给我带来了许多启发,但是这篇文章中的代码的执行速率一直不高,究其原因,是由于在下面这个函数中

public Mat changeRGB(Mat mat, double k) {
Mat newMat = new Mat(mat.size(), CvType.CV_8UC1); for (int i = 0; i < mat.rows(); i++) {
for (int j = 0; j < mat.cols(); j++) {
double[] color = mat.get(i, j); color[0] *= k; newMat.put(i, j, color); } } return newMat;}

由于需要不断地循环,因此造成了非常大的延迟,为此,如果能有一种简洁的方法来代替函数中不断地循环过程,或许能够给代码的执行速率带来提升。

在查阅了相关资料之后,我找到了convertScaleAbs()这个函数,该函数的构造如下:

public static void convertScaleAbs(Mat src, Mat dst, double alpha){
convertScaleAbs_1(src.nativeObj, dst.nativeObj, alpha); return;}

函数的三个参数分别为输入数组,输出数组以及乘数因子。

测试后的图像和上文连接中的代码显现了相同的效果,但是效率得到了很大的提升。

关键代码如下

//RGB三通道分离List
splitMat = new ArrayList
();Core.split(src, splitMat);//得到RGB三个通道的均值double meanB = Core.mean(splitMat.get(0)).val[0];double meanG = Core.mean(splitMat.get(1)).val[0];double meanR = Core.mean(splitMat.get(2)).val[0];//调整RGB三个通道的增益double kB = (meanB + meanG + meanR) / (3 * meanB);double kG = (meanB + meanG + meanR) / (3 * meanG);double kR = (meanB + meanG + meanR) / (3 * meanR);//调整RGB三个通道的值List
mergeMatList = new ArrayList
();Mat merge = new Mat();Mat newMat = new Mat(splitMat.get(0).size(), CvType.CV_8UC1);Mat newMat1 = new Mat(splitMat.get(1).size(), CvType.CV_8UC1);Mat newMat2 = new Mat(splitMat.get(2).size(), CvType.CV_8UC1);convertScaleAbs(splitMat.get(0),newMat,kB);convertScaleAbs(splitMat.get(1),newMat1,kG);convertScaleAbs(splitMat.get(2),newMat2,kR);mergeMatList.add(newMat);mergeMatList.add(newMat1);mergeMatList.add(newMat2);//合并三通道Core.merge(mergeMatList, merge);

转载地址:http://dmlvb.baihongyu.com/

你可能感兴趣的文章
零基础学Java需要做哪些准备?需要注意些什么呢?
查看>>
有了这份阿里大牛手写630页Java高级面试手册,offer稳了【建议收藏】
查看>>
学习Java,需要学到什么程度,才能出去找工作?
查看>>
2021年Java发展怎么样?现在学了Java技术出来是否还能找到工作?
查看>>
Java程序员面试大厂的技术标准,你达到要求了吗?
查看>>
为什么Java程序员需求量这么大,还会有人找不到合适的工作?
查看>>
过来人对程序员学习Java的10条建议,第2点很重要!
查看>>
大学生如何学好Java?过来人给你7点建议
查看>>
过来人的经验:Java实习生在公司里一般都做什么?
查看>>
Java入门基础知识点整理大放送,推荐收藏
查看>>
如何成为月入25k的高级程序员?建议养成这7个习惯
查看>>
学 Java还是Python, 哪个更好找工作?
查看>>
Java基础知识:如何计算Java对象占用内存大小?
查看>>
一份Java程序员的珍藏书单,请您注意查收
查看>>
为什么这么多人Java基础薄弱?该如何提升?
查看>>
如何成为一名合格的Java程序员?
查看>>
spring框架中5种自动装配模式介绍
查看>>
如何学习Spring框架?有哪些建议?
查看>>
Java程序员烂大街了吗?是,也不是
查看>>
为什么学编程大部分人选Java编程语言?
查看>>