java直方图算法,用 Java 使用 OpenCV 编写直方图处理程序

用Java使用OpenCV编写直方图处理程序:

(一)计算一个图像的直方图

importjava.util.ArrayList;

importorg.opencv.core.Core;

importorg.opencv.core.CvType;

importorg.opencv.core.Mat;

importorg.opencv.core.MatOfFloat;

importorg.opencv.core.MatOfInt;

importorg.opencv.core.Scalar;

importorg.opencv.imgcodecs.Imgcodecs;

importorg.opencv.imgproc.Imgproc;

public class MyHistograms {

// 加载OpenCV本地库

static {

System.loadLibrary(Core.NATIVE_LIBRARY_NAME );

}

public static void main(String[]args) {

Mat image = Imgcodecs.imread("mylena.png");

Mat gray = new Mat(image.height(), image.width(), CvType.CV_8U, new Scalar(0)); Imgproc.cvtColor(image, gray, Imgproc.COLOR_BGR2GRAY);

Mat hist = new Mat(256, 1, CvType.CV_8U, new Scalar(0));

ArrayListhistsSource = new ArrayList();

histsSource.add(gray);

Imgproc.calcHist(histsSource, new MatOfInt(0), new Mat(), hist, new MatOfInt(256), new MatOfFloat(0f, 256f));

System.out.println(hist);

System.out.println(hist.dump());

intpixAll = gray.rows() * gray.cols();

Mat histNorm = new Mat(hist.rows(), hist.cols(), hist.type());

Core.divide(hist, new Scalar(pixAll), histNorm);

System.out.println(histNorm);

System.out.println(histNorm.dump());

}

}

直方图从统计学的角度表征图像,它可以反映图片的整体亮度和对比度: