要从十万张图片里面找出所以相同的图片。
各位有什么好的思路?不要告诉我用两个for循环嵌套,一个一个去比较。
先行谢谢各位了

解决方案 »

  1.   

    嗯,两个for循环嵌套 倒是不必要的
    但一个循环总是要有的,这个方案能接受吗?
      

  2.   

    本帖最后由 xuzuning 于 2012-11-16 07:40:08 编辑
      

  3.   

    看标题我还以为你要做类似google的图片搜索呢。你这种简单的找相同文件比较文件md5就可以了。不过注意,必须是完全相同的两个文件!两张图片有一个像素不同,md5结果也是不同的。
      

  4.   


    这代碉堡了。利用PHP自带的ISSET函数来进来判断。牛逼。版主威武!
      

  5.   


    因为只是测试这一万多个文件,就没有保存md5值了,只是求这一万多个文件临时存到了数组中。若是项目中,考虑到还有后续新增的图片文件,可以将md5值做为索引保存到数据库。这也不失为一个方法。
      

  6.   

    把每张 图片md5,存储md5后的值入数据库。然后搜索就是
      

  7.   

    问一下哈foreach(blob('path/*' as $f) 里面的blob('path/*' 是不是掉了一个‘)’,还有blob('path/*' 是什么意思啊
      

  8.   

    查php.net,你就知道blob是干嘛的
      

  9.   

    我觉得要是后面需要扩展的话,保存起文件的md5是狠必要的,那么保存的话存在数据库中或者内存中其实是不划算的,那么个人认为可将每个文件的md5值存储在一个txt文件中,那么这样的话就会好些了应该,然后explode成一个数组,之后就是循环查找,就是不知道效率怎么样!个人见解、楼主莫喷
      

  10.   

    10w也就100k啊
    32字节的hash也就是3.2M啊
    这数据也不大,怎么就不划算了呢
      

  11.   


    44秒只能说你的图片已经很小了,换上几M乃至十几M一张图片,CPU再弱一点的话,半个小时以上不成问题我刚刚i3 hash 300张图片都用了近十分钟,每张都是几十M的……同目录下应该先比较字节数再hash,减少CPU压力
      

  12.   

    首先你的10W文件哪里来的
    来之前就得考虑做标志!将每个的hash保存到数据库
    然后直接在数据库做对比
    而不是现在直接这样处理如果目前已经木已成舟 
    那就建议 做个工具先处理成hash保存到数据库!再做对比
      

  13.   

    for循环是少不了的,但是可以有办法让for循环的次数减少。先对图片处理吧,可以先对图片进行降维建立特征值图片(可以删除掉大量和图片无关的信息,但是还是可以保证对比成功,最常见得就是[PCA了),保存之后就是矩阵的表示形式,用距离来计算就好了
      

  14.   

    自己想的一个想法,没实现过,抛出来讨论一下。
    第一轮:
    取每个图片的数据,截取前面小额的数据,例如256 bit ,做比较。
    第二轮:
     对相同的数据,进行二次全值比对。当然,程序的运行复杂度,取决于相同图片的多少。这个方法我想应该挺适合10w 中仅有几十张相同的。
      

  15.   

    安装楼上的说法,算出MD5,存到数据库里面,然后使用sql查询,应该可以查出相同的
      

  16.   

    用PHP函数了,好像有个函数有这种功能
      

  17.   

    glob本函数不能作用于远程文件,被检查的文件必须通过服务器的文件系统访问。

    blob , php5手册没有啊 
    还有就是弱弱的问一句,同一个文件夹里面可以有两个完全相同的图片吗