Beispiel #1
0
func (self *HaarClassifierCascade) DetectObjects(image *IplImage, storage *MemStorage, scale float64, minNeighbors, flags int, minSize, maxSize Size) []*Rect {
	c_storage := (*C.CvMemStorage)(storage)
	c_self := (*C.CvHaarClassifierCascade)(self)

	c_seq := C.cvHaarDetectObjects(
		unsafe.Pointer(image),
		c_self,
		c_storage,
		C.double(scale),
		C.int(minNeighbors),
		C.int(flags),
		C.cvSize(C.int(minSize.Width), C.int(minSize.Height)),
		C.cvSize(C.int(maxSize.Width), C.int(maxSize.Height)),
	)

	seq := (*Seq)(c_seq)

	var arr []*Rect
	var r Rect

	seq.ForEach(reflect.TypeOf(r), func(obj interface{}) {
		arr = append(arr, obj.(*Rect))
	})

	return arr
}
Beispiel #2
0
func (this *HaarCascade) DetectObjects(image *IplImage) []*Rect {
	storage := C.cvCreateMemStorage(0)
	seq := C.cvHaarDetectObjects(unsafe.Pointer(image), this.cascade, storage, 1.1, 3, C.CV_HAAR_DO_CANNY_PRUNING, C.cvSize(0, 0), C.cvSize(0, 0))
	var faces []*Rect
	for i := 0; i < (int)(seq.total); i++ {
		rect := (*Rect)((*_Ctype_CvRect)(unsafe.Pointer(C.cvGetSeqElem(seq, C.int(i)))))
		faces = append(faces, rect)
	}
	return faces
}
Beispiel #3
0
func detect(tarImg *C.IplImage) *C.CvSeq {
	cvHCC := (*C.CvHaarClassifierCascade)(
		C.cvLoad(C.CString("./config/haarcascade_frontalface_default.xml"),
			(*C.CvMemStorage)(nil),
			(*C.char)(nil),
			(**C.char)(nil)))
	cvMStr := C.cvCreateMemStorage(0)

	return C.cvHaarDetectObjects(
		unsafe.Pointer(tarImg),
		cvHCC,
		cvMStr,
		1.11,
		3,
		0,
		C.cvSize(0, 0),
		C.cvSize(0, 0),
	)
}