2011-09-28 25 views
5

से मेल खाने पर आयताकार रेखाचित्र मैं एक संदर्भ छवि पर एक टेम्पलेट मैच एक टेम्पलेट मैच खोजने के लिए OpenCv का उपयोग करता हूं। जब कोड को खोजने के क्षेत्र डायन एक टेम्पलेट क्षेत्र के आसपास एक आयत बनाएं लेकिन क्या मैं चाहता है नहीं करता है जब कोड क्षेत्र कोड किसी भी आयत नहीं करता है लगता है से मेलओपनसीवी।

कोड:

IplImage *res; 
    CvPoint  minloc, maxloc; 
    double  minval, maxval; 
    int   img_width, img_height; 
    int   tpl_width, tpl_height; 
    int   res_width, res_height; 

    NSString *path = [[NSBundle mainBundle] pathForResource:@"reference" ofType:@"jpg"]; 
    reference.image = [UIImage imageWithContentsOfFile:path]; 

    NSString *pathPatron = [[NSBundle mainBundle] pathForResource:@"template" ofType:@"jpg"]; 
    template.image = [UIImage imageWithContentsOfFile:pathPatron]; 

    IplImage *img = [self CreateIplImageFromUIImage:original.image];// 
    IplImage *tpl = [self CreateIplImageFromUIImage:patron.image]; 

    img_width = img->width; 
    img_height = img->height; 
    tpl_width = tpl->width; 
    tpl_height = tpl->height; 
    res_width = img_width - tpl_width + 1; 
    res_height = img_height - tpl_height + 1;  
    res = cvCreateImage(cvSize(res_width, res_height), IPL_DEPTH_32F, 1); 

    /* choose template matching method to be used */ 
    cvMatchTemplate(img, tpl, res, CV_TM_SQDIFF); 

     cvMinMaxLoc(res, &minval, &maxval, &minloc, &maxloc, 0); 

     /* draw red rectangle */ 

    cvRectangle(img, 
       cvPoint(minloc.x, minloc.y), 
       cvPoint(minloc.x + tpl_width, minloc.y + tpl_height), 
       cvScalar(0, 0, 255, 0), 1, 0, 0);  

    /* display images */ 
    reference.image = [self UIImageFromIplImage:img]; 

    cvReleaseImage(&img); 
    cvReleaseImage(&tpl); 
    cvReleaseImage(&res); 

अग्रिम धन्यवाद

उत्तर

2

cvMatchTemplate वास्तव में मैच नहीं ढूंढता है - यह आपकी छवि और टेम्पलेट के लिए समानता मानचित्र की गणना करता है। इसके बाद आपको यह तय करने की ज़रूरत है कि कोई वास्तविक मैच है या कोई मिलान नहीं है।

if (minval < THRESHOLD) 
{ 
    //draw rectangle 
} 

आप THRESHOLD के एक कार्य मूल्य खोजने के लिए कुछ प्रयोग करने की जरूरत है: सरल समाधान के कुछ सीमा के साथ एक तुलना है।

+0

ठीक है आपको बहुत धन्यवाद – josiland

+0

@josiland आप क्या परिवर्तन करते हैं। इस पोस्ट को भी रोकें। – Gypsa