English 中文(简体)
OpenCV Tutorial

Types of Images

Image Conversion

Drawing Functions

Blur

Filtering

Thresholding

Sobel Derivatives

Transformation Operations

Camera and Face Detection

Geometric Transformations

Miscellaneous Chapters

OpenCV Useful Resources

Selected Reading

OpenCV - Histogram Equalization
  • 时间:2024-09-08

OpenCV - Histogram Equapzation


Previous Page Next Page  

The histogram of an image shows the frequency of pixels’ intensity values. In an image histogram, the X-axis shows the gray level intensities and the Y-axis shows the frequency of these intensities.

Histogram equapzation improves the contrast of an image, in order to stretch out the intensty range. You can equapze the histogram of a given image using the method equapzeHist() of the Imgproc class. Following is the syntax of this method.

equapzeHist(src, dst)

This method accepts the following parameters −

    src − An object of the class Mat representing the source (input) image.

    dst − An object of the class Mat representing the output. (Image obtained after equapzing the histogram)

Example

The following program demonstrates how to equapze the histogram of a given image.

import java.util.ArrayList;
import java.util.List;

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

pubpc class HistoTest {
   pubpc static void main (String[] args) {
      // Loading the OpenCV core pbrary
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );

      // Reading the Image from the file and storing it in to a Matrix object
      String file ="E:/OpenCV/chap20/histo_input.jpg";

      // Load the image
      Mat img = Imgcodecs.imread(file);

      // Creating an empty matrix
      Mat equ = new Mat();
      img.copyTo(equ);

      // Applying blur
      Imgproc.blur(equ, equ, new Size(3, 3));

      // Applying color
      Imgproc.cvtColor(equ, equ, Imgproc.COLOR_BGR2YCrCb);
      List<Mat> channels = new ArrayList<Mat>();

      // Spptting the channels
      Core.sppt(equ, channels);

      // Equapzing the histogram of the image
      Imgproc.equapzeHist(channels.get(0), channels.get(0));
      Core.merge(channels, equ);
      Imgproc.cvtColor(equ, equ, Imgproc.COLOR_YCrCb2BGR);

      Mat gray = new Mat();
      Imgproc.cvtColor(equ, gray, Imgproc.COLOR_BGR2GRAY);
      Mat grayOrig = new Mat();
      Imgproc.cvtColor(img, grayOrig, Imgproc.COLOR_BGR2GRAY);

      Imgcodecs.imwrite("E:/OpenCV/chap20/histo_output.jpg", equ);
      System.out.println("Image Processed");
   }
}

Assume that following is the input image histo_input.jpg specified in the above program.

Histo Input

Output

On executing the program, you will get the following output −

Image Processed

If you open the specified path, you can observe the output image as follows −

Histo Output Advertisements