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
)

/**
 * OpenCV-4.0.0 直方圖計算 
 *    
 * @return: void  
 * @date: 2019年1月21日 下午9:43:34
 */
public static void calcHist() {
	Mat src = Imgcodecs.imread("C:\\Users\\xuhya\\Pictures\\99.jpg");
	Mat gray = new Mat();
	//圖片灰度化
	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);
	//計算直方圖
	Imgproc.calcHist(matList,new MatOfInt(0),new Mat(),histogram,histSize ,ranges);
	//創建直方圖面板
	Mat histImage = Mat.zeros( 100, (int)histSize.get(0, 0)[0], CvType.CV_8UC1);
	//歸一化直方圖                     
	Core.normalize(histogram, histogram, 1, histImage.rows() , Core.NORM_MINMAX, -1, new Mat() );   
	//繪製幾何直方圖
	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);
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章