Iphone 基于openCv的图像比较
我正在使用OpenCV算法进行图像比较: 我的代码: -(void)opencvImageCompare{ NSMutableArray*valuesArray=[[NSMutableArray alloc]init]Iphone 基于openCv的图像比较,iphone,opencv,Iphone,Opencv,我正在使用OpenCV算法进行图像比较: 我的代码: -(void)opencvImageCompare{ NSMutableArray*valuesArray=[[NSMutableArray alloc]init] NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; IplImage *img = [self CreateIplImageFromUIImage:imageView.image]; // always ch
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
IplImage *img = [self CreateIplImageFromUIImage:imageView.image];
// always check camera image
if(img == 0) {
printf("Cannot load camera img");
}
for (int i=0; i<[appDelegate.weedArray count]; i++) {
weedObject=[appDelegate.weedArray objectAtIndex:i];
IplImage *res;
CvPoint minloc, maxloc;
double minval, maxval;
double values;
NSString *weedImage=[weedObject.image stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
UIImage *imageTocompare = [UIImage imageNamed:weedImage];
IplImage *imageTocompareIpl = [self CreateIplImageFromUIImage:imageTocompare];
// always check server image
if(imageTocompareIpl == 0) {
printf("Cannot load serverIplImageArray image");
}
if(img->width-imageTocompareIpl->width<=0 && img->height-imageTocompareIpl->height<=0){
int balWidth=imageTocompareIpl->width-img->width;
int balHeight=imageTocompareIpl->height-img->height;
img->width=img->width+balWidth+100;
img->height=img->height+balHeight+100;
}
CvSize size = cvSize(
img->width - imageTocompareIpl->width + 1,
img->height - imageTocompareIpl->height + 1
);
res = cvCreateImage(size, IPL_DEPTH_32F, 1);
// CV_TM_SQDIFF CV_TM_SQDIFF_NORMED
// CV_TM_CCORR CV_TM_CCORR_NORMED
// CV_TM_CCOEFF CV_TM_CCOEFF_NORMED
cvMatchTemplate(img, imageTocompareIpl, res,CV_TM_CCOEFF);
cvMinMaxLoc(res, &minval, &maxval, &minloc, &maxloc, 0);
printf("\n value %f", maxval-minval);
values=maxval-minval;
NSString *valString=[NSString stringWithFormat:@"%f",values];
[valuesArray addObject:valString];
weedObject.values=[valString doubleValue];
printf("\n------------------------------");
cvReleaseImage(&imageTocompareIpl);
cvReleaseImage(&res);
}
cvReleaseImage(&img);
NSAutoreleasePool*pool=[[NSAutoreleasePool alloc]init];
IplImage*img=[self-CreateIplImageFromUIImage:imageView.image];
//始终检查相机图像
如果(img==0){
printf(“无法加载摄像头img”);
}
对于(int i=0;i宽度图像到比较IPL->宽度高度图像到比较IPL->高度宽度img->宽度;
int balHeight=imageTocompareIpl->height img->height;
img->width=img->width+balWidth+100;
img->height=img->height+balHeight+100;
}
CvSize size=CvSize(
img->width-imagestocompareipl->width+1,
img->height-imagestocompareipl->height+1
);
res=cvCreateImage(大小,IPL_深度_32F,1);
//CV_TM_SQDIFF CV_TM_SQDIFF_标准化
//CV_TM_CCORR CV_TM_CCORR_标准
//CV_TM_Cceeff CV_TM_Cceeff_标准
cvMatchTemplate(img、imageTocompareIpl、res、CV_TM_cFoff);
cvMinMaxLoc(res,&minval,&maxval,&minloc,&maxloc,0);
printf(“\n值%f”,maxval-minval);
值=maxval-minval;
NSString*valString=[NSString stringWithFormat:@“%f”,值];
[valuesArray addObject:valString];
值=[valString doubleValue];
printf(“\n-----------------------------”);
cvReleaseImage(&ImageToComparePL);
cvReleaseImage&res;
}
cvReleaseImage(&img);
}
但是我没有得到准确的结果,当我选择相同的图像进行比较时,它的值不是0,而是其他一些值。请帮助我解决这个问题。您试图比较哪种图像?为什么要计算
maxval
和minval
之间的差异?结果不应该是minval
您正在寻找?模板与图像中某个区域之间的最小距离?这些图像是不同的杂草图像。我正在比较杂草图像。通常情况下,您应该只关心模板匹配的最小值。通常情况下,除非您使用的是完全相同的图像中的一个部分,否则距离不会为0。谢谢我一直在寻找精确的值。你想比较什么类型的图像?为什么你要计算maxval
和minval
之间的差异?你不应该寻找minval
吗?模板和图像中某个区域之间的最小距离?这些图像与我不同比较图像。通常情况下,您应该只关心模板匹配的最小值。通常,除非您使用的是完全相同的图像中的一个部分,否则距离不会为0。谢谢,我得到了我要查找的精确值。