
opencv的一个问题 70
voiddetect_and_draw(IplImage*img){staticCvScalarcolors[]={{{0,0,255}},{{0,128,255}},{...
void detect_and_draw( IplImage* img )
{
static CvScalar colors[] =
{
{{0,0,255}},
{{0,128,255}},
{{0,255,255}},
{{0,255,0}},
{{255,128,0}},
{{255,255,0}},
{{255,0,0}},
{{255,0,255}}
};
double scale = 1.3;
IplImage* gray = cvCreateImage( cvSize(img->width,img->height), 8, 1 );
IplImage* small_img = cvCreateImage( cvSize( cvRound (img->width/scale),cvRound (img->height/scale)),8, 1 );
int i;
cvCvtColor( img, gray, CV_BGR2GRAY ); //彩色转灰度
cvResize( gray, small_img, CV_INTER_LINEAR ); //大小变换
cvEqualizeHist( small_img, small_img ); //灰度图象直方图均衡化
cvClearMemStorage( storage ); //清空存储块中的存储内容
if( cascade )
{
double t = (double)cvGetTickCount();
CvSeq * faces = cvHaarDetectObjects( small_img, cascade, storage,
1.6, 2,0, /*CV_HAAR_DO_CANNY_PRUNING,*/
cvSize(20, 20) );
t = (double)cvGetTickCount() - t;
printf( "detection time = %gms\n", t/((double)cvGetTickFrequency()*1000.) );
for( i = 0; i < (faces ? faces->total : 0); i++ )
{
CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
CvPoint pt1,pt2;
pt1.x = r->x*scale;
pt2.x = (r->x+r->width)*scale;
pt1.y = r->y*scale;
pt2.y = (r->y+r->height)*scale;
cvRectangle( img, pt1, pt2, CV_RGB(0,255,0), 3, 8, 0 );
我用这个程序检测了人脸,怎样将圈中的人脸中的元素值提取出来? 展开
{
static CvScalar colors[] =
{
{{0,0,255}},
{{0,128,255}},
{{0,255,255}},
{{0,255,0}},
{{255,128,0}},
{{255,255,0}},
{{255,0,0}},
{{255,0,255}}
};
double scale = 1.3;
IplImage* gray = cvCreateImage( cvSize(img->width,img->height), 8, 1 );
IplImage* small_img = cvCreateImage( cvSize( cvRound (img->width/scale),cvRound (img->height/scale)),8, 1 );
int i;
cvCvtColor( img, gray, CV_BGR2GRAY ); //彩色转灰度
cvResize( gray, small_img, CV_INTER_LINEAR ); //大小变换
cvEqualizeHist( small_img, small_img ); //灰度图象直方图均衡化
cvClearMemStorage( storage ); //清空存储块中的存储内容
if( cascade )
{
double t = (double)cvGetTickCount();
CvSeq * faces = cvHaarDetectObjects( small_img, cascade, storage,
1.6, 2,0, /*CV_HAAR_DO_CANNY_PRUNING,*/
cvSize(20, 20) );
t = (double)cvGetTickCount() - t;
printf( "detection time = %gms\n", t/((double)cvGetTickFrequency()*1000.) );
for( i = 0; i < (faces ? faces->total : 0); i++ )
{
CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
CvPoint pt1,pt2;
pt1.x = r->x*scale;
pt2.x = (r->x+r->width)*scale;
pt1.y = r->y*scale;
pt2.y = (r->y+r->height)*scale;
cvRectangle( img, pt1, pt2, CV_RGB(0,255,0), 3, 8, 0 );
我用这个程序检测了人脸,怎样将圈中的人脸中的元素值提取出来? 展开
2个回答
展开全部
opencv里有个概念叫ROI,region of interest,
比如你获得的人脸的矩形框如果是cvRect region的话,源图像是img的话,下面的代码可以实现
cvSetImageROI((IplImage*)img, region);
// Copy region of interest into a new iplImage and return it.
size.width = region.width;
size.height = region.height;
m_FaceArea = cvCreateImage(size, IPL_DEPTH_8U, img->nChannels);
cvCopy(img, m_FaceArea); // Copy just the region.
cvResetImageROI((IplImage *)img);
m_FaceArea就是脸的图像了
比如你获得的人脸的矩形框如果是cvRect region的话,源图像是img的话,下面的代码可以实现
cvSetImageROI((IplImage*)img, region);
// Copy region of interest into a new iplImage and return it.
size.width = region.width;
size.height = region.height;
m_FaceArea = cvCreateImage(size, IPL_DEPTH_8U, img->nChannels);
cvCopy(img, m_FaceArea); // Copy just the region.
cvResetImageROI((IplImage *)img);
m_FaceArea就是脸的图像了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询