cvRect 和IplImage 和cvMat

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 ); 

看来很完美了!

你可能感兴趣的:(opencv)