【问题标题】:Check presence of subimage in image in iOS [closed]检查iOS中图像中子图像的存在[关闭]
【发布时间】:2013-12-13 08:29:09
【问题描述】:

我有 2 张图片,分别是 smallImage 和 largeImage。现在,我想检查smallerImage 是否是largerImage 的一部分(或子图像)。我不知道如何检查。我想在 iOS 中完成这一切。在搜索之后,我发现使用 openCV 库是用于此类东西的最佳库。但我不知道如何使用 openCV 库来执行我的任务。

总之,我想知道,

1) 在大图中查找/检查子图像有哪些不同的技术/方法/算法

2)如何使用openCV库来执行(1)。(即如何使用它来检查大图中的子图像)

【问题讨论】:

  • 我只是想知道算法/技术的名称,以便我可以通过谷歌学习它们,所以不需要搁置它

标签: ios opencv machine-learning computer-vision image-comparison


【解决方案1】:

您可以使用 OpennCV 模板匹配算法..

请尝试一下..

https://github.com/Fl0p/OpenCV-iOS下载opencv2.framework

https://github.com/aptogo/OpenCVForiPhone/tree/master/OpenCVClient下载UIImage+OpenCV

导入文件opencv2/nonfree/nonfree.hpp、opencv2/highgui/highgui.hpp、opencv2/calib3d/calib3d.hpp、UIImage+OpenCV.h

使用此功能匹配图像。

-(BOOL) matchImages:(UIImage*)largerImage Image2:(UIImage*)subImage
{

 cv::Mat tempMat1 = [largerImage CVMat];
 cv::Mat tempMat2 = [subImage CVMat];

 cv::Mat result;


 int match_method = CV_TM_SQDIFF_NORMED;
 //cv::cvtColor(tempMat1, debug, CV_GRAY2BGR);
 //cv::cvtColor(tempMat1, tempMat1, cv::COLOR_RGB2GRAY);
 //cv::cvtColor(tempMat2, tempMat2, cv::COLOR_RGB2GRAY);

 int result_cols =  tempMat1.cols - tempMat2.cols + 1;
 int result_rows = tempMat1.rows - tempMat2.rows + 1;

 result.create( result_cols, result_rows, CV_32FC1 );


 /// Do the Matching and Normalize
 cv::matchTemplate( tempMat1,tempMat2 ,result,match_method);

 double minVal; double maxVal;
 cv::Point minLoc, maxLoc, matchLoc;
 cv::minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, cv::Mat() );
 if( match_method == CV_TM_SQDIFF || match_method == CV_TM_SQDIFF_NORMED ) matchLoc = minLoc;
 else matchLoc = maxLoc;

//NSLog(@"%d %d",tempMat1.cols,tempMat1.rows);
NSLog(@"%f %f",minVal,maxVal);

 if (minVal < 0.25) {

     NSLog(@"success");

     //cv::rectangle(tempMat1,matchLoc,cv::Point(matchLoc.x + tempMat2.cols , matchLoc.y + tempMat2.rows),CV_RGB(255,0,0),3);

     //UIImage *resImage = [[UIImage alloc] initWithCVMat:tempMat1];
     //UIImageView * imageview = [[UIImageView alloc] initWithImage:resImage];
     //[imageview setFrame:CGRectMake(0, 0, resImage.size.width, resImage.size.height)];
     //[self.view addSubview:imageview];

     return YES;
 }
 else {

    return NO;
 }
}

【讨论】:

  • 非常感谢,我会试试的,给你状态....
  • 工作得很好,你能告诉我,如果我想找到百分比相似性该怎么办。 minVal 是否指定(1% 相似度)?
  • 不确定。 minVal 和 maxVal 取决于匹配方法。在 CV_TM_SQDIFF 方法中,minVal 匹配越少越准确。
  • 哦,我会尝试其他可用的方法
  • 对不起,我不知道。。子图像的坐标将是 matchLoc.x,matchLoc.y 左上角。
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
  • 1970-01-01
相关资源
最近更新 更多