iOS开发005 OpenCV--基于模板图片的标记识别

本文介绍了一种使用OpenCV进行皮肤检测的方法,并结合模板匹配技术实现了目标定位。通过加载两张图片,分别进行皮肤区域的提取及灰度转换,进而利用模板匹配找出目标位置。
部署运行你感兴趣的模型镜像

转载请注明来源:http://blog.youkuaiyun.com/wanggsx918/article/details/23773729

效果图如下:




[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #import "UIImage+OpenCV.h"  
  2.   
  3. #import "MyViewController.h"  
  4. #import <opencv2/highgui/ios.h>  
  5. #import <opencv2/imgproc/imgproc_c.h>  
  6. #import <opencv2/core/core_c.h>  
  7. #import <opencv2/features2d/features2d.hpp>  
  8. #import <opencv2/nonfree/features2d.hpp>  
  9.   
  10. // Aperture value to use for the Canny edge detection  
  11. const int kCannyAperture = 7;  
  12.   
  13. @interface MyViewController ()  
  14. - (void)processFrame;  
  15. @end  
  16.   
  17. @implementation MyViewController  
  18.   
  19. @synthesize imageView = _imageView;  
  20. @synthesize imageView1 = _imageView1;  
  21.   
  22. - (void)viewDidLoad  
  23. {  
  24.     [super viewDidLoad];  
  25.       
  26.     //[self TakeColorFromImageHSV];  
  27.     UIImage *mImage =  [UIImage imageNamed:@"防伪标签007.jpg"];  
  28.     IplImage *srcIpl = [self convertToIplImage:mImage];  
  29.     IplImage *dscIpl = cvCreateImage(cvGetSize(srcIpl), srcIpl->depth, 1);  
  30.     [self SkinDetect:srcIpl withParam:dscIpl];  
  31.     IplImage *dscIplNew = cvCreateImage(cvGetSize(srcIpl),  IPL_DEPTH_8U, 3);  
  32.     cvCvtColor(dscIpl, dscIplNew, CV_GRAY2BGR);  
  33.     self.imageView.image = mImage;  
  34.       
  35.       
  36.     UIImage *mImage1 =  [UIImage imageNamed:@"temple005.jpg"];  
  37.     self.imageView1.image = mImage1;  
  38.     IplImage *srcIpl1 = [self convertToIplImage:mImage1];  
  39.     IplImage *dscIpl1 = cvCreateImage(cvGetSize(srcIpl1), srcIpl1 ->depth, 1);  
  40.     [self SkinDetect:srcIpl1 withParam:dscIpl1];  
  41.     IplImage *dscIplNew1 = cvCreateImage(cvGetSize(srcIpl1), IPL_DEPTH_8U, 3);  
  42.     cvCvtColor(dscIpl1, dscIplNew1, CV_GRAY2BGR);  
  43.       
  44.     IplImage *src = srcIpl;  
  45.     IplImage *srcResult = srcIpl;  //用来显示  
  46.     IplImage *templat = srcIpl1;  
  47.     IplImage *result;  
  48.     int srcW, srcH, templatW, templatH, resultH, resultW;  
  49.     srcW = src->width;  
  50.     srcH = src->height;  
  51.     templatW = templat->width;  
  52.     templatH = templat->height;  
  53.     resultW = srcW - templatW + 1;  
  54.     resultH = srcH - templatH + 1;  
  55.     result = cvCreateImage(cvSize(resultW, resultH), 321);  
  56.     cvMatchTemplate(src, templat, result, CV_TM_SQDIFF);  
  57.     double minValue, maxValue;  
  58.     CvPoint minLoc, maxLoc;  
  59.     cvMinMaxLoc(result, &minValue, &maxValue, &minLoc, &maxLoc);  
  60.     cvRectangle(srcResult, minLoc, cvPoint(minLoc.x + templatW, minLoc.y+ templatH), cvScalar(0,0,255));  
  61.   
  62.      
  63.     self.imageView1.image = [self convertToUIImage:srcResult];  
  64.       
  65. }  
  66.   
  67.   
  68.   
  69. /// UIImage类型转换为IPlImage类型  
  70. -(IplImage*)convertToIplImage:(UIImage*)image  
  71. {  
  72.     CGImageRef imageRef = image.CGImage;  
  73.     CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();  
  74.     IplImage *iplImage = cvCreateImage(cvSize(image.size.width, image.size.height), IPL_DEPTH_8U, 4);  
  75.     CGContextRef contextRef = CGBitmapContextCreate(iplImage->imageData, iplImage->width, iplImage->height, iplImage->depth, iplImage->widthStep, colorSpace, kCGImageAlphaPremultipliedLast|kCGBitmapByteOrderDefault);  
  76.     CGContextDrawImage(contextRef, CGRectMake(00, image.size.width, image.size.height), imageRef);  
  77.     CGContextRelease(contextRef);  
  78.     CGColorSpaceRelease(colorSpace);  
  79.     IplImage *ret = cvCreateImage(cvGetSize(iplImage), IPL_DEPTH_8U, 3);  
  80.     cvCvtColor(iplImage, ret, CV_RGB2BGR);  
  81.     cvReleaseImage(&iplImage);  
  82.     return ret;  
  83. }  
  84.   
  85. /// IplImage类型转换为UIImage类型  
  86. -(UIImage*)convertToUIImage:(IplImage*)image  
  87. {  
  88.     cvCvtColor(image, image, CV_BGR2RGB);  
  89.     CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();  
  90.     NSData *data = [NSData dataWithBytes:image->imageData length:image->imageSize];  
  91.     CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)data);  
  92.     CGImageRef imageRef = CGImageCreate(image->width, image->height, image->depth, image->depth * image->nChannels, image->widthStep, colorSpace, kCGImageAlphaNone | kCGBitmapByteOrderDefault, provider, NULLfalse, kCGRenderingIntentDefault);  
  93.     UIImage *ret = [UIImage imageWithCGImage:imageRef];  
  94.     CGImageRelease(imageRef);  
  95.     CGDataProviderRelease(provider);  
  96.     CGColorSpaceRelease(colorSpace);  
  97.     return ret;  
  98. }  
  99.   
  100. - (void)viewDidUnload  
  101. {  
  102.     [super viewDidUnload];  
  103.     self.imageView = nil;  
  104.     self.imageView1=nil;  
  105.       
  106.     delete _videoCapture;  
  107.     _videoCapture = nil;  
  108. }  
  109.   
  110.   
  111. @end  

您可能感兴趣的与本文相关的镜像

Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值