OPENCV人形查找

在opencv 的objdetect包中一些对物体的识别算法,研究的一个函数备戽。原本是打算用来为相机做虚化滤镜的,研究后发现,该函数似乎对近景识别率不如远景高,可能是参数问题,也可能是SVM库训练不够,暂时记下,待后研究,可能可以用于家用摄像头开发。

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.imgproc.Imgproc;
import org.opencv.objdetect.HOGDescriptor;

public class People {
	public static void main(String[] args) {
		System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
		Mat src = Highgui.imread("E:/work/qqq/b7.jpg");
		if (src.empty()) {
			System.out.println("enter People");
		}
		if (src.cols() > 1000 || src.rows() > 1000)
			Imgproc.resize(src, src, new Size(src.cols() / 3, src.rows() / 3));
		Mat dst = findPeople(src);
		Highgui.imwrite("E:/work/qqq/Y4.jpg", dst);

	}

	public static Mat findPeople(Mat image) {
		if (image.empty()) {
			System.out.println("image is exist");
		}

		HOGDescriptor hog = new HOGDescriptor();
		hog.setSVMDetector(HOGDescriptor.getDefaultPeopleDetector());
		// hog.setSVMDetector(HOGDescriptor.getDaimlerPeopleDetector());
		MatOfRect regions = new MatOfRect();
		MatOfDouble foundWeights = new MatOfDouble();
		hog.detectMultiScale(image, regions, foundWeights); // ,0, new Size(8,
															// 8), new Size(32,
															// 32), 1.05, true);
		for (Rect rect : regions.toArray()) {
			Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
					new Scalar(0, 0, 255), 2);
		}
		return image;
	}
}


猜你喜欢

转载自blog.csdn.net/blogercn/article/details/77987181