1 讀取圖片
2 圖片轉灰度圖片
3 加載 HOGDescriptor 自帶行人檢測
4 循環檢測結果畫出檢測結果輪廓
5 顯示結果
package com.xu.opencv.ml;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfDouble;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.HOGDescriptor;
/**
* HOGDescriptor 自帶行人檢測
* @ClassName: HOG
* @Description: TODO
* @author: hyacinth
* @date: 2019年8月4日 上午10:10:53
* @Copyright: hyacinth
*/
public class HOG {
static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public static void main(String[] args) {
runner();
}
/**
* OpenCV-4.1.0 HOGDescriptor 自帶行人檢測
* @return: void
* @date: 2019年8月4日10:09:58
*/
public static void runner() {
Mat src=Imgcodecs.imread("C:\\Users\\hyacinth\\Pictures\\photo.jpg");
Mat gary=new Mat();
Imgproc.cvtColor(src, gary, Imgproc.COLOR_BGR2GRAY);
HOGDescriptor hog=new HOGDescriptor();
hog.setSVMDetector(HOGDescriptor.getDefaultPeopleDetector());
MatOfRect rect=new MatOfRect();
hog.detectMultiScale(gary, rect, new MatOfDouble(),1.05,new Size(4,4),new Size(32,32));
Rect[] rects = rect.toArray();
for (int i = 0; i < rects.length; i++) {
Imgproc.rectangle(src, new Point(rects[i].x,rects[i].y), new Point(rects[i].x+rects[i].width,rects[i].y+rects[i].height), new Scalar(0,0,255), 2, Imgproc.LINE_AA);
}
HighGui.imshow("HOG行人檢測", src);
HighGui.waitKey(1);
}
}