题目来源于:南京师范大学韦玉春教授慕课国家精品课《遥感数字图像处理》程序设计建议 

OpenCV如何配置在IDEA中自行百度

环境:win10+IDEA2021.2.3+jdk11.0.1+OpenCV-460.jar

一、简介

背景:直方图均衡化是一种简单有效的图像增强技术,通过改变图像的直方图来改变图像中各像素的灰度,主要用于增强动态范围偏小的图像的对比度。原始图像由于其灰度分布可能集中在较窄的区间,造成图像不够清晰。例如,过曝光图像的灰度级集中在高亮度范围内,而曝光不足将使图像灰度级集中在低亮度范围内。采用直方图均衡化,可以把原始图像的直方图变换为均匀分布(均衡)的形式,这样就增加了像素之间灰度值差别的动态范围,从而达到增强图像整体对比度的效果。

二、算法流程

1.根据图像计算直方图和累计直方图

2.将累计直方图进行区间转换

例如:已知一幅图像的像素分布为7×7,根据像素值,则可以计算得到统计直方图

java 画直线粗细 java如何直方画图_图像处理

 根据统计直方图,可以算出归一化直方图和累计直方图

java 画直线粗细 java如何直方画图_idea_02

 由8个灰度级转换为256个灰度级,进行区间转换,转换时对结果进行四舍五入,所以会出现两个灰度级转换并入一个灰度级

java 画直线粗细 java如何直方画图_opencv_03

 二、具体实现

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

/**
 * @Author: jue_chen
 * @Date: 2022/11/01/ 15:29
 * @Attention: 转载, 引用请注明出处
 */
public class HistogramEqualization {
    //加载本地动态链接库
    static {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    }

    //直方图均衡化
    public Mat histEqualization(String path) {
        //以灰度图的形式读入
        Mat mat = Imgcodecs.imread(path, 0);
        HighGui.imshow("原图", mat);
        //定义直方图均衡化后的图像
        Mat mat_equalize = new Mat();
        //进行直方图均衡化
        Imgproc.equalizeHist(mat, mat_equalize);
        HighGui.imshow("均衡化后的图像", mat_equalize);
        HighGui.waitKey();

        return mat_equalize;
    }

    public static void main(String[] args) {
        HistogramEqualization he = new HistogramEqualization();
        Mat mat = he.histEqualization("D:\\Project\\IDEA_Project\\RS01\\src\\rs01\\img\\10.png");
        //将均衡化后的图像存入文件
        Imgcodecs.imwrite("D:\\Project\\IDEA_Project\\RS01\\src\\rs01\\img\\10_he.png", mat);
    }
}

 三、结果

1.读入的图像

java 画直线粗细 java如何直方画图_图像处理_04

2.经过均衡化后的图像 

java 画直线粗细 java如何直方画图_java_05

 从中可以看出图像的对比度得到了较大的提高,突出了更多的细节,直方图均衡化处理之后,原来比较少像素的灰度会被分配到别的灰度去,像素相对集中, 处理后灰度范围变大,对比度变大,清晰度变大,所以能有效增强图像