gpt4 book ai didi

opencv - 如何在OpenCV中增加Haar检测器的窗口大小

转载 作者:行者123 更新时间:2023-12-02 17:54:49 26 4
gpt4 key购买 nike

我正在使用此网站上的可用代码:http://nashruddin.com/OpenCV_Face_Detection进行面部检测。

我想增加检测到的面部区域的大小。我不确定该怎么做。需要一些帮助。

我正在使用的代码是这样的:
//

#include "stdafx.h"

#include <stdio.h>
#include <cv.h>
#include <highgui.h>

CvHaarClassifierCascade *cascade;
CvMemStorage *storage;

void detectFaces( IplImage *img );

int main( int argc, char** argv )
{
CvCapture *capture;
IplImage *frame;
int key;
char *filename = "C:/OpenCV2.1/data/haarcascades/haarcascade_frontalface_alt.xml";

cascade = ( CvHaarClassifierCascade* )cvLoad( filename, 0, 0, 0 );
storage = cvCreateMemStorage( 0 );
capture = cvCaptureFromCAM( 0 );

assert( cascade && storage && capture );

cvNamedWindow( "video", 1 );

while( key != 'q' ) {
frame = cvQueryFrame( capture );

if( !frame ) {
fprintf( stderr, "Cannot query frame!\n" );
break;
}

cvFlip( frame, frame, -1 );
frame->origin = 0;

detectFaces( frame );

key = cvWaitKey( 10 );
}

cvReleaseCapture( &capture );
cvDestroyWindow( "video" );
cvReleaseHaarClassifierCascade( &cascade );
cvReleaseMemStorage( &storage );

return 0;
}

void detectFaces( IplImage *img )
{
int i;

CvSeq *faces = cvHaarDetectObjects(
img,
cascade,
storage,
1.1,
3,
0 /*CV_HAAR_DO_CANNY_PRUNNING*/,
cvSize( 40, 40 ) );

for( i = 0 ; i < ( faces ? faces->total : 0 ) ; i++ ) {
CvRect *r = ( CvRect* )cvGetSeqElem( faces, i );
cvRectangle( img,
cvPoint( r->x, r->y ),
cvPoint( r->x + r->width, r->y + r->height ),
CV_RGB( 255, 0, 0 ), 1, 8, 0 );
}

cvShowImage( "video", img );
}

最佳答案

这会增加脸部周围矩形的大小。如果您打算增加雷达探测器的窗口大小,请更新您的问题。

int padding_width = 30; // pixels
int padding_height = 30; // pixels

for( i = 0 ; i < ( faces ? faces->total : 0 ) ; i++ ) {
CvRect *r = ( CvRect* )cvGetSeqElem( faces, i );

// Yes yes, all of this could be written much more compactly.
// It was written like this for clarity.

int topleft_x = r->x - (padding_width / 2);
int topleft_y = r->y - (padding_height / 2);
if (topleft_x < 0)
topleft_x = 0;
if (topleft_y < 0)
topleft_y = 0;

int bottomright_x = r->x + r->width + (padding_width / 2);
int bottomright_y = r->y + r->height + (padding_height / 2);
if (bottomright_x >= img->width)
bottomright_x = img->width - 1;
if (bottomright_y >= img->height)
bottomright_y = img->height - 1;

cvRectangle( img,
cvPoint(topleft_x, topleft_y),
cvPoint(bottomright_x, bottomright_y),
CV_RGB( 255, 0, 0 ), 1, 8, 0 );
}

关于opencv - 如何在OpenCV中增加Haar检测器的窗口大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9323652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com