Java OpenCV-4.0.0 圖像處理20 直方圖比較
Java OpenCV-4.0.0 直方圖比較
對輸入的兩張圖像計算得到直方圖H1與H2,歸一化到相同的尺度空間
然後可以通過計算H1與H2的之間的距離得到兩個直方圖的相似程度進
而比較圖像本身的相似程度。Opencv提供的比較方法有四種:
Correlation 相關性比較
Chi-Square 卡方比較
Intersection 十字交叉性
Bhattacharyya distance 巴氏距離
1 首先把圖像從RGB色彩空間轉換到HSV色彩空間cvtColor
2 計算圖像的直方圖,然後歸一化到[0~1]之間calcHist和normalize;
3 使用上述四種比較方法之一進行比較compareHist
/**
* OpenCV-4.0.0 直方圖比較
*
* @return: void
* @date: 2019年1月21日 下午10:21:29
*/
public static void compareHist() {
Mat src = Imgcodecs.imread("C:\\Users\\xuhya\\Pictures\\99.jpg");
Mat dst = new Mat();
Mat gray = new Mat();
//圖片灰度化
Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
//圖片轉HSV
Imgproc.cvtColor(src,dst,Imgproc.COLOR_BGR2HSV);
MatOfFloat mfloat=new MatOfFloat(0,256);
MatOfInt mint = new MatOfInt(255);
List<Mat> matList = new ArrayList<Mat>();
matList.add(gray);
Mat hist = new Mat();
//直方圖計算
Imgproc.calcHist(matList,new MatOfInt(0),new Mat(),hist,mint ,mfloat);
//圖片歸一化
Core.normalize(hist, hist, 1, hist.rows() , Core.NORM_MINMAX, -1, new Mat() );
//直方圖比較
double a=Imgproc.compareHist(hist,hist,Imgproc.CV_COMP_CORREL);
System.out.println(a);
}