流程:
先获取相机的实时数据,得到image,这里需要用到自定义相机 这里已经写的很详细了,我是参考了苹果的Demo自己写了一个 iOS开发–AVFoundation自定义相机
图像识别主要分为3种基于灰度相关,基于特征,基于关系。
这里也有详细的介绍 常用的图像匹配算法及优缺点有哪些? 剩下的是一些参考过别的语言实现的资料,有些没写上因为当时找的时候记下来,只能贴上一些现在能找到的了 看起来像它——图像搜索其实也不难 基于感知哈希算法的视觉目标跟踪 感知哈希算法(Perceptual hash algorithm)的OpenCV实现
1.缩小尺寸
去除高频和细节的最快方法是缩小图片,将图片缩小到8x8的尺寸,总共64个像素。不要保持纵横比,只需将其变成8*8的正方形。这样就可以比较任意大小的图片,摒弃不同尺寸、比例带来的图片差异。
2.转成灰色
将8*8的小图片转换成灰度图像,将64个像素的颜色(red,green,blue)转换成一种颜色(黑白灰度)。
3.计算灰度平均值
计算所有64个像素的灰度平均值。
4.比较像素灰度平均值
将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。
组成出一段图片的hash值例如1010101001
5.比较两张图的hash值
例如
1010101001….1010101001
1010110101….1010110101
共64位,不相同的值小于5,说明非常相似,大于10说明有差距
- (NSInteger)getSuitabilityWithImageA:(UIImage *)imageA imageB:(UIImage *)imageB{
self.imageA = [self getGrayImage:[imageA scaleToSize:CGSizeMake(8, 8)]];
self.imageB = [self getGrayImage:[imageB scaleToSize:CGSizeMake(8, 8)]];
return [self similarityArrayA:[self similarityValueWithImage:self.imageA] similarityArrayB:[self similarityValueWithImage:self.imageB]];
}
//比较两张图的哈希值
- (NSInteger)similarityArrayA:(NSArray *)arrayA similarityArrayB:(NSArray *)arrayB{
NSInteger similarity = 0;
for (NSInteger i = 0; i<arrayA.count ; i++) {
if ([arrayA[i] isEqualToNumber:arrayB[i]]) {
similarity++;
}
}
return (64-similarity);
}
之前一直没有忘了放demo,正好最近在用swift,顺便把图像识别也放进去 demo地址
请保持转载后文章内容的完整,以及文章出处。本人保留所有版权相关权利。