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);
}
}
》原圖
》直方圖反向投影