2011-07-12 34 views
3

我需要做一個iPhone應用程序,可以在圖像中查找圖像模式。 (像thisiphone中使用openCV進行對象檢測?模板匹配還是哈爾?

經過無數谷歌搜索,我覺得唯一的選擇,我已經在opencv中使用模板匹配功能,它已被移植到objectiveC。

我發現從this GitHub的代碼的ObjectiveC一個簡單的OpenCV的項目一個很好的起點。

但它是僅使用邊緣檢測和人臉檢測功能在OpenCV的。我需要一個使用模板匹配函數 - 「cvMatchTemplate」 - 在objectiveC for iPhone中使用的objectiveC示例嗎?

下面是我現在的代碼:(至少它沒有給我錯誤,但這段代碼,返回一個完全黑色的圖像,我期待結果圖像匹配區域會更亮?)

IplImage *imgTemplate = [self CreateIplImageFromUIImage:[UIImage imageNamed:@"laughing_man.png"]]; 
    IplImage *imgSource = [self CreateIplImageFromUIImage:imageView.image];   
    CvSize sizeTemplate = cvGetSize(imgTemplate); 
    CvSize sizeSrc = cvGetSize(imgSource);  
    CvSize sizeResult = cvSize(sizeSrc.width - sizeTemplate.width+1, sizeSrc.height-sizeTemplate.height + 1); 
    IplImage *imgResult = cvCreateImage(sizeResult, IPL_DEPTH_32F, 1); 
    cvMatchTemplate(imgSource, imgTemplate, imgResult, CV_TM_CCORR_NORMED); 
    cvReleaseImage(&imgSource); 
    cvReleaseImage(&imgTemplate);   
    imageView.image = [self UIImageFromIplImage:imgResult]; 
    cvReleaseImage(&imgResult); 

p/S:或者,我應該嘗試使用cvHaarDetectObjects識別對象?

+0

嗨,你可以幫我一個任務 – Rajneesh071

+0

它不工作 – Rajneesh071

+0

喜抱歉,我已經停止了這方面的工作太久...... – mkto

回答

5

從cvMatchTemplate的結果是一個32位的浮點圖像。爲了顯示結果,您需要將其轉換爲無符號字符8位圖像(IPL_DEPTH_8U)。

的CV_TM_CCORR_NORMED方法之間[0,1]和cvConvertScale提供了一種簡單的方法來做到的縮放和類型轉換產生的值。嘗試加入以下代碼:

IplImage* displayImgResult = cvCreateImage(cvGetSize(imgResult), IPL_DEPTH_8U, 1);  
cvConvertScale(imgResult, displayImgResult, 255, 0); 
imageView.image = [self UIImageFromIplImage:displayImgResult]; 
+0

嗨jeff,謝謝你的回答我會在我回去工作的時候嘗試一下。同時我也可以問你,爲了實現類似於我發佈的YouTube鏈接,我應該堅持matchtemplate還是應該看看cvHaarDetectObject? – mkto

+0

嗨,傑夫,謝謝你的指針!我終於看到了opencv返回的一些有意義的模式(你可以在這裏看到它們:http://encryptedpixel.wordpress.com/2011/07/13/346/)。我創建了另一個問題來了解如何分析這些模式:http://stackoverflow.com/questions/6673684/how-to-analyze-results-returned-by-opencvs-cvmatchtemplate如果你有答案,請幫助我謝謝! – mkto

+1

剛剛對視頻進行了更改,我會推薦一種不同的方法。我認爲使用SIFT或SURF功能的物體識別類型方法可以獲得更好的效果。這些將爲您提供一些穩健的縮放,旋轉和比模板匹配更具辨別性。 – jeff7