我需要做一个可以在图像中查找图像模式的 iphone 应用程序。 (比如 this)
经过多次谷歌搜索,我觉得我唯一的选择是使用已为 objectiveC 移植的 opencv 中的模板匹配功能。
我从 this 中为 objectiveC 中的简单 opencv 项目找到了一个很好的起点。 github代码。
但它只是使用了openCV中的边缘检测和人脸检测功能。我需要一个在 iPhone 的 objectiveC 中使用模板匹配函数“cvMatchTemplate”的 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 来识别对象吗?
最佳答案
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];
关于objective-c - 使用 openCV 在 iphone 中进行对象检测?模板匹配还是haar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6661706/