用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());
}
}
直方图从统计学的角度表征图像,它可以反映图片的整体亮度和对比度: