for( i = 0; i < (faces ? faces->total : 0); i++ )
{
CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
cvSetImageROI(img, *r );
IplImage *smallface=cvCreateImage( cvSize(r->width,r->height), 8, 3 );
cvCopy(img,smallface);
cvResetImageROI(img);
cvShowImage ("SingleFace",smallface);
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(255,0,0), 3, 8, 0 );
}
就五句话,憋了我一个晚上.
这个帖子可以了结了.
luckdst
OpenCV硕士生
帖子: 293
注册: 2006-11-22 11:06
不知道一下这些对你有否帮助
CvMat *mgntd = cvCreateMat(100, 200, CV_32SC1);
//mgntd是一个矩阵,我希望把灰度图象中一小块的像素值弄下来,存在这个矩阵中
cvGetSubRect( grayimage, mgntd, cvRect(50, 100, 100, 200)) ;
//grayimage是灰度图象,之前已经load进来。这条语句执行完之后,mgntd的data指针就指向了一个灰度值数组。
通过下面的方法可以将CvMat转成IplImage:
IplImage *testimage1 = cvCreateImage(cvGetSize(mgntd),8,1);
cvGetImage( mgntd, testimage1 );
cvSaveImage("g:/test1.bmp",testimage1);
creepingdog
OpenCV初中生
帖子: 22
注册: 2006-12-03 15:49
页首
由 luckdst ? 2006-12-05 13:12
楼上的大哥说的方法我实验了一下,发现也可以,也是5句话:
CvSeq* faces = cvHaarDetectObjects( img, cascade, storage,1.1, 2, CV_HAAR_DO_CANNY_PRUNING,cvSize(40, 40) );
for( i = 0; i < (faces ? faces->total : 0); i++)
{
CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
///////////////////////////////////////////////////////////////////
CvMat *mgntd = cvCreateMat(r->width,r->height, CV_32SC1);
cvGetSubRect( img, mgntd, *r) ;
IplImage *smallface = cvCreateImage(cvGetSize(mgntd),8,3);
cvGetImage( mgntd, smallface );
cvShowImage ("SingleFace",smallface);
////////////////////////////////////
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(255,0,0), 3, 8, 0 );
}
看来很完美了!