Reprinted please indicate Source: http://blog.csdn.net/wanggsx918/article/details/23833425
# Import "UIImage + OpenCV. h" # import "MyViewController. h" # import
# Import
# Import
# Import
# Import
@ Interface MyViewController ()-(void) processFrame; @ end @ implementation MyViewController @ synthesize imageView = _ imageView; @ synthesize imageView1 = _ imageView1;-(void) viewDidLoad {[super viewDidLoad]; UIImage * mImage = [UIImage imageNamed: @ "counterfeit label 004.jpg"]; IplImage * srcIpl = [self convertToIplImage: mImage]; iplImage * dscIpl = cvCreateImage (cvGetSize (srcIpl), srcIpl-> depth, 1); IplImage * Signature = cvCreateImage (cvGetSize (srcIpl), expires, 3); cvtcvtcolor (dscIpl, dscIplNew, CV_GRAY2BGR); UIImage * mImage1 = [UIImage imageNamed: @ "counterfeit label .jpg"]; IplImage * srcIpl1 = [self convertToIplImage: mImage1]; iplImage * dscIpl1 = cvCreateImage (cvGetSize (srcIpl1), srcIpl1-> depth, 1); IplImage * Signature = cvCreateImage (cvGetSize (srcIpl1), expires, 3); cvtcvtcolor (dscIpl1, required, required); UIImage * tempImage = [UIImage imageNamed: @ "temple005.jpg"]; IplImage * iplTempImage = [self created: tempImage]; BOOL tf = [self ComparePPKImage: srcIpl withAnotherImage: srcIpl1 withTempleImage: iplTempImage]; if (tf) {printf ("matching successful \ n");} else {printf ("matching failed \ n ");}} // image matching-(BOOL) ComparePPKImage :( IplImage *) mIplImage withAnotherImage :( IplImage *) mIplImage1 margin :( IplImage *) mTempleImage {// mark CvPoint minLoc = [self limit: mTempleImage withImage: mIplImage]; if (minLoc. x = mIplImage-> width | minLoc. y = mIplImage-> height) {printf ("the first image template tag failed \ n"); return false ;} // The second template mark CvPoint minLoc1 = [self CompareTempleImage: mTempleImage withImage: mIplImage1]; if (minLoc1.x = mIplImage1-> width | minLoc1.y = mIplImage1-> height) {printf ("template tag for the second image failed \ n"); return false;} // crop the image IplImage * cropImage, * cropImage1; cropImage = [self cropIplImage: mIplImage withStartPoint: minLoc withWidth: mTempleImage-> width withHeight: mTempleImage-> height]; cropImage1 = [self defined: Custom withStartPoint: minLoc1 withWidth: mTempleImage-> width withHeight: mTempleImage-> height]; self. imageView. image = [self convertToUIImage: cropImage]; self. imageView1.image = [self convertToUIImage: cropImage1]; double rst = [self CompareHist: cropImage withParam2: cropImage1]; if (rst <0.05) {return true;} else {return false ;}} /// tag Recognition Based on Template images-(CvPoint) watermark :( IplImage *) templeIpl withImage :( IplImage *) mIplImage {IplImage * src = mIplImage; IplImage * templat = templeIpl; iplImage * result; int srcW, srcH, templatW, templatH, resultH, resultW; srcW = src-> width; srcH = src-> height; templatW = templat-> width; templatH = templat-> height; resultW = srcW-templatW + 1; resultH = srcH-templatH + 1; result = cvCreateImage (cvSize (resultW, resultH), 32, 1 ); cvMatchTemplate (src, templat, result, CV_TM_SQDIFF); double minValue, maxValue; CvPoint minLoc, maxLoc; cvMinMaxLoc (result, & minValue, & maxValue, & minLoc, & maxLoc ); if (minLoc. y + templatH> srcH | minLoc. x + templatW> srcW) {printf ("marked image \ n" not found); minLoc. x = srcW; minLoc. y = srcH;} return minLoc;}-(IplImage *) cropIplImage :( IplImage *) srcIpl withStartPoint :( CvPoint) mPoint withWidth :( int) width withHeight :( int) height {// IplImage * cropImage; cvSetImageROI (srcIpl, cvRect (mPoint. x, mPoint. y, width, height); cropImage = cvCreateImage (cvGetSize (srcIpl), IPL_DEPTH_8U, 3); cvCopy (srcIpl, cropImage); cvResetImageROI (srcIpl); return cropImage ;} // histogram comparison of multi-channel color images-(double) CompareHist :( IplImage *) image1 withParam2 :( IplImage *) image2 {int hist_size = 256; iplImage * Records = cvCreateImage (cvGetSize (image1), 8, 1); cvCvtColor (image1, gray_plane, etc.); CvHistogram * Records = cvCreateHist (1, & hist_size, CV_HIST_ARRAY ); cvCalcHist (& gray_plane, gray_hist); IplImage * gray_plane2 = cvCreateImage (cvGetSize (image2), 8, 1); cvCvtColor (image2, gray_plane2, CV_BGR2GRAY ); cvHistogram * gray_hist2 = cvCreateHist (1, & hist_size, CV_HIST_ARRAY); cvCalcHist (& gray_plane2, gray_hist2); double rst = cvCompareHist ); printf ("comparison result = % f \ n", rst); return rst;} // histogram of a single-channel color image-(double) CompareHistSignle :( IplImage *) image1 withParam2 :( IplImage *) image2 {int hist_size = 256; CvHistogram * gray_hist = cvCreateHist (1, & hist_size, CV_HIST_ARRAY); cvCalcHist (& image1, gray_hist ); cvHistogram * gray_hist2 = cvCreateHist (1, & hist_size, CV_HIST_ARRAY); cvCalcHist (& image2, gray_hist2); return cvCompareHist (gray_hist, gray_hist2, history );} /// convert the UIImage type to the IPlImage type-(IplImage *) convertToIplImage :( UIImage *) image {CGImageRef imageRef = image. CGImage; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB (); IplImage * iplImage = cvCreateImage (cvSize (image. size. width, image. size. height), interval, 4); CGContextRef contextRef = crop (iplImage-> imageData, iplImage-> width, iplImage-> height, iplImage-> depth, iplImage-> widthStep, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrderDefault); CGContextDrawImage (contextRef, CGRectMake (0, 0, image. size. width, image. size. height), imageRef); CGContextRelease (contextRef); cgcolorspacereltrans (colorSpace); IplImage * ret = cvCreateImage (cvGetSize (iplImage), weight, 3); cvCvtColor (iplImage, ret, CV_RGB2BGR); cvReleaseImage (& iplImage); return ret;} // convert the IplImage type to the UIImage type-(UIImage *) convertToUIImage :( IplImage *) image {cvCvtColor (image, CV_BGR2RGB); CGColorSpaceRef colorSpace = ceiling (); NSData * data = [NSData dataWithBytes: image-> imageData length: image-> imageSize]; CGDataProviderRef provider = ceiling (CFDataRef) data); CGImageRef imageRef = CGImageCreate (image-> width, image-> height, image-> depth, image-> depth * image-> nChannels, image-> widthStep, colorSpace, kCGImageAlphaNone | delimiter, provider, NULL, false, delimiter); UIImage * ret = [UIImage imageWithCGImage: imageRef]; CGImageRelease (imageRef); identifier (provider); CGColorSpaceRelease (colorSpace ); return ret;}-(void) viewDidUnload {[super viewDidUnload]; self. imageView = nil; self. imageView1 = nil; delete _ videoCapture; _ videoCapture = nil;} @ end