Java OpenCV-4.0.0 图像处理19 直方图计算

Java OpenCV-4.0.0 图像处理19 直方图计算

Java OpenCV-4.0.0 直方图计算

其实对图像梯度、每个像素的角度、等一切图像的属性值,我们都可以建立直方图。这个才是直方图的概念真正意义,不过是基于图像像素灰度直方图是最常见的。
直方图最常见的几个属性:
dims 表示维度,对灰度图像来说只有一个通道值dims=1
bins 表示在维度中子区域大小划分,bins=256,划分为256个级别
range 表示值得范围,灰度值范围为[0~255]之间

split(// 把多通道图像分为多个单通道图像
const Mat &src, //输入图像
Mat* mvbegin)// 输出的通道图像数组

calcHist(
const Mat* images,//输入图像指针
int images,// 图像数目
const int* channels,// 通道数
InputArray mask,// 输入mask,可选,不用
OutputArray hist,//输出的直方图数据
int dims,// 维数
const int* histsize,// 直方图级数
const float* ranges,// 值域范围
bool uniform,// true by default
bool accumulate// false by defaut
)

package com.xu.opencv;

import java.util.LinkedList;
import java.util.List;

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.MatOfFloat;
import org.opencv.core.MatOfInt;
import org.opencv.core.Scalar;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

/**  
 * 
 * @Title: Image.java   
 * @Description: OpenCV-4.0.0 测试文件
 * @Package com.xu.test   
 * @author: xuhyacinth     
 * @date: 2019年5月7日12:13:13   
 * @version: V-1.0.0 
 * @Copyright: 2019 xuhyacinth
 *
 */
public class Image {

	static {
		//在使用OpenCV前必须加载Core.NATIVE_LIBRARY_NAME类,否则会报错
		System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
	}

	public static void main(String[] args) {
		calcHist();
	}
	
	/**
	 * OpenCV-4.0.0 直方图计算 
	 * @return: void  
	 * @date: 2019年5月7日12:16:55
	 */
	public static void calcHist() {
		Mat src=Imgcodecs.imread("C:\\Users\\Administrator\\Pictures\\3.jpeg");
		Mat gray = new Mat();
		//1 图片灰度化
		Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
		List<Mat> matList = new LinkedList<Mat>();
		matList.add(gray);
		Mat histogram = new Mat();
		MatOfFloat ranges=new MatOfFloat(0,256);
		MatOfInt histSize = new MatOfInt(255);
		//2 计算直方图
		Imgproc.calcHist(matList,new MatOfInt(0),new Mat(),histogram,histSize ,ranges);
		//3 创建直方图面板
		Mat histImage = Mat.zeros( 100, (int)histSize.get(0, 0)[0], CvType.CV_8UC1);
		//4 归一化直方图                     
		Core.normalize(histogram, histogram, 1, histImage.rows() , Core.NORM_MINMAX, -1, new Mat() );   
		//5 绘制几何直方图
		for( int i = 0; i < (int)histSize.get(0, 0)[0]; i++ ){                   
			Imgproc.line(histImage,new org.opencv.core.Point(i, histImage.rows()),new org.opencv.core.Point(i, histImage.rows()-Math.round( histogram.get(i,0)[0])) ,new Scalar( 255, 255, 255),1, 8, 0 );
		}
		HighGui.imshow("直方图计算", histImage);
		HighGui.waitKey(0);
	}

}


Java OpenCV-4.0.0 图像处理19 直方图计算_第1张图片

你可能感兴趣的:(Java,图形图像,OpenCV,图像处理,直方图计算,calcHist,Java,OpenCV-4.0.0,OpenCV)