基于OpenCV对图片清晰度、色偏和亮度的检测(java版)

由来:近期项目需要检测图片的亮度和色偏,但网上大多为用C实现的,没有java版本的,此篇为java版本对opencv的调用,谨以此献给优快云的广大用户。

一. 导入OpenCV所需依赖

依赖下载:OpenCV运行环境下载(包含jar包和dll依赖库)

  1. 在IDEA的项目模块下新建一个libs目录,将opencv-343.jar放进去,将opencv_java343.dll放到项目下。
    如图:
    在这里插入图片描述
    注意:opencv_java343.dll文件很多时候会加载不了,放在系统的path路径下也是可以的,jdk目录以及windows32目录下都是可行的,如果有强迫症的话就放在项目下吧。

  2. pom 文件依赖引入

<dependency>
     	<groupId>org.opencv</groupId>
        <artifactId>opencv</artifactId>
        <version>0.0.1</version>
        <scope>system</scope>
        <systemPath>${
   
   project.basedir}/libs/opencv-343.jar</systemPath>
</dependency>

二. 项目代码

1. 色偏检测

原理说明: 网上常用的一种方法是将RGB图像转变到CIE Lab空间,其中L表示图像亮度,a表示图像红/绿分量,b表示图像黄/蓝分量。通常存在色偏的图像,在a和b分量上的均值会偏离原点很远,方差也会偏小;通过计算图像在a和b分量上的均值和方差,就可评估图像是否存在色偏。计算CIE Lab*空间是一个比较繁琐的过程,好在OpenCV提供了现成的函数,因此整个过程也不复杂。

/**
     * opencv 检测图片色偏
     * jpegFile:待检测的图片
     * calcCast 计算并返回一幅图像的色偏度以及,色偏方向
     * cast 计算出的偏差值,小于1表示比较正常,大于1表示存在色偏
     * da 红/绿色偏估计值,da大于0,表示偏红;da小于0表示偏绿
     * db 黄/蓝色偏估计值,db大于0,表示偏黄;db小于0表示偏蓝
     */
    import org.opencv.core.Core;
	import org.opencv.core.Mat;
	import org.opencv.imgcodecs.Imgcodecs;
	import org.opencv.imgproc.Imgproc;
	
    public static Boolean colorException(File jpegFile) {
   
   
        Mat srcImage = Imgcodecs.imread(jpegFile.getAbsolutePath());
        Mat dstImage = new Mat();
        //  将RGB图像转变到CIE L*a*b*
        Imgproc.cvtColor(srcImage, dstImage, Imgproc.COLOR_BGR2Lab);
        float a=0,b=0;
        int HistA[] = new int[256],HistB[] = new int[256];
        for(int i=0;i<256;i++)
        {
   
   
            HistA[i]=0;
            HistB[i]=0;
        }
        int size= (int)dstImage.total() * dstImage.channels();
        for(int i=0;i < dstImage.rows(); i++)
        {
   
   
            for(int j=0;j< dstImage.cols(); j++)
            {
   
   
                //在计算过程中,要考虑将CIEL*a*b*空间还原后同
                a+=(float)(dstImage.get(i,j)[1]-128);
                b+=(float)(dstImage.get(i,j)[2]-128
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值