使用openCV在iphone中检测对象?模板匹配还是哈尔?

时间:2011-07-12 08:58:55

标签: objective-c opencv

我需要做一个可以在图像中查找图像模式的iPhone应用程序。 (像this

经过多次谷歌搜索后,我觉得这是我在opencv中使用模板匹配功能的唯一选择,该功能已经移植到objectiveC。

我从this github代码中找到了ObjectiveC中一个简单的opencv项目的一个很好的起点。

但它只在openCV中使用边缘检测和面部检测功能。我需要一个使用模板匹配函数的objectiveC示例 - “cvMatchTemplate” - 在ObjectiveC for iPhone中?

下面是我现在的代码:(至少它没有给我错误,但这段代码,返回一个完全黑色的图像,我期待一个结果图像匹配区域会更亮?)< / p>

    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识别对象吗?

1 个答案:

答案 0 :(得分: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];