Java OpenCV-4.0.0 圖像處理21 直方圖反向投影

Java OpenCV-4.0.0 圖像處理21 直方圖反向投影

Java OpenCV-4.0.0 直方圖反向投影

反向投影是反映直方圖模型在目標圖像中的分佈情況。
簡單點說就是用直方圖模型去目標圖像中尋找是否有相似的對象。通常用HSV色彩空間的HS兩個通道直方圖模型。
1.建立直方圖模型
2.計算待測圖像直方圖並映射到模型中
3.從模型反向計算生成圖像

加載圖片imread
將圖像從RGB色彩空間轉換到HSV色彩空間cvtColor
計算直方圖和歸一化calcHist與normalize
計算反向投影圖像 - calcBackProject

package com.xu.opencv;

import org.opencv.core.*;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

import java.util.ArrayList;
import java.util.List;

public class Image {

    static {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    }

    public static void main(String[] args) throws Exception {
        calcBackProject();
    }

    /**
     * OpenCV-4.0.0 直方圖反向投影
     *
     * @return: void
     * @date: 2019年1月22日 下午22:43:34
     */
    public static void calcBackProject() {
        Mat src = Imgcodecs.imread("C:\\Users\\xuhya\\Pictures\\00.jpg");
        Mat hsv = new Mat();
        //1 圖片轉HSV
        Imgproc.cvtColor(src, hsv, Imgproc.COLOR_BGR2HSV);
        //2 計算直方圖
        List<Mat> listmat = new ArrayList<>();
        listmat.add(hsv);
        Mat histimage = new Mat();
        Imgproc.calcHist(listmat, new MatOfInt(0), new Mat(), histimage, new MatOfInt(255), new MatOfFloat(0, 255));
        //3 歸一化
        Core.normalize(histimage, histimage, 1, histimage.rows(), Core.NORM_MINMAX, -1, new Mat());
        //4 直方圖反向投影
        Mat backimage = new Mat();
        Imgproc.calcBackProject(listmat, new MatOfInt(0), histimage, backimage, new MatOfFloat(0, 255), 2.0);
        HighGui.imshow("白蛇", backimage);
        HighGui.waitKey(0);
    }

}

》原圖
原圖
》直方圖反向投影
處理後圖片

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