2014-09-23 2 views
0

Я новичок в openCV. Я пытаюсь обрезать изображение, но код, который я написал, не обрезает его. Пожалуйста, помогите мне. Я получил область моего интереса, но когда я пытаюсь скопировать он копирует весь образ не только область интересаOpenCv Cropping issue

#include<iostream> 
using namespace std; 
#include<vector> 
#include<iostream> 
#include<opencv2\opencv.hpp> 


CvMemStorage * st = 0; 
CvHaarClassifierCascade * hcc= 0; 
char * path = "C:/Users/Gardezi/Documents/Visual Studio 2012/Projects/AIMRL/AIMRL/haarcascade_frontalface_alt.xml"; 



bool startDetection(IplImage * img) 
{ 
int i ; 
cvCreateImage(cvGetSize(img) , img->depth , img->nChannels); 
CvPoint pt1 , pt2; 
IplImage * f ; 
if (hcc) 
{ 
     CvSeq * face = cvHaarDetectObjects(img , hcc , st , 1.1 , 2 , CV_HAAR_DO_CANNY_PRUNING , cvSize(40 , 40)); 


    //Face to Data Base 

    for (i = 0 ;i < (face? face->total : 0) ; i++) 
    { 
     CvRect * r = (CvRect*)cvGetSeqElem(face , i); 
     pt1.x = r->x; 
     pt1.y = r->y; 
     pt2.x = r->x + r->width; 
     pt2.y = r->y + r->height; 

    cvRectangle(img , pt1 , pt2 , CV_RGB(255, 0 , 0) , 3 , 8 , 0); 

     cvSetImageROI(img , cvRect(pt1.x , pt1.y , pt2.x , pt2.y)); 


     f = cvCreateImage(cvGetSize(img) , img->depth , img->nChannels); 

     cvCopy(img , f , NULL); 

    } 


} 

cvShowImage("Result" , f); 
cvWaitKey(0); 
return true; 
} 



void main() 
{ 
IplImage * img; 
hcc = (CvHaarClassifierCascade *)cvLoad(path , 0 , 0 , 0); 
img = cvLoadImage("download.jpg" , 0); 
st = cvCreateMemStorage(0); 
startDetection(img); 
} 

ответ

2

Если вы новичок в OpenCV, то не используйте IplImage, но cv::Mat. Кадрирование тривиально с помощью операторской скобки, и если вам нужно скопировать интересующую область в новое изображение, вы вызываете clone().

cv::Rect roi; 
cv::Mat image; 
[...] //Initialization of roi and image 
cv::Mat roiOfImage = image(roi); 
cv::Mat deepCopyOfRoiImage = image(roi).clone(); 
+0

Я хотел спросить, как вы делаете это: резюме :: Mat roiOfImage = изображение (КОРОЛЬ) Если когда-нибудь я пытаюсь сделать это он дает мне ошибку – 2014-09-24 07:10:31