phash计算png图片指纹返回总为0

今天在用phash做线上封面图去重,之前自己开发机mac上有个用port install phash安装的phash,源码是phash.org中提供的c++版本的,没遇到啥问题。今天打算用docker包一下放服务器上跑,发现了个有趣的现象,所有的png图片计算出来的指纹都是0。

In [214]: lib = ctypes.CDLL(find_library('pHash'), use_errno=True)

In [215]: phash = ctypes.c_uint64()

In [216]: lib.ph_dct_imagehash("/tmp/new3.png", ctypes.pointer(phash))
Out[216]: 0

In [217]: phash
Out[217]: c_ulong(0L)

而后在mac上直接编译使用,结果同上,也是总为0。很有意思,一开始一直在检查自己的代码,直到简化成只剩几行了,还是有问题。一直没敢怀疑phash.org上已经放出来好几年的代码,毕竟那一套东西2013年之后就没变过了,应该没啥太大问题。

04.23.2013 pHash 0.9.6 released. Fix some compilation errors and warnings, as well as updates to the automake files to support building on Gentoo.

而后开始对源码进行修改,采用print大法来debug,才发现真的是phash写的有些问题。

CImg<float> img;
if (src.spectrum() == 3){
        img = src.RGBtoYCbCr().channel(0).get_convolve(meanfilter);
    } else if (src.spectrum() == 4){
    int width = img.width();
        int height = img.height();
        int depth = img.depth();
    img = src.crop(0,0,0,0,width-1,height-1,depth-1,2).RGBtoYCbCr().channel(0).get_convolve(meanfilter);
    } else {
    img = src.channel(0).get_convolve(meanfilter);
    }
img.resize(32,32);

这段代码来源于ph_dct_imagehash方法,就是算phash的核心方法,这边用Cimg对图像做了一些处理,src是输入的原始图片,img应该是处理完之后的,生成一个32*32的图片。src.spectrum()方法获取图片通道,png图片有RGBA四个通道,问题就出在这,这块应该是想获取图片的宽高信息,而后做截图处理。然而img还没初始化,返回的都只能是0,导致后边各种计算返回一片0,修改为src后即可。

else if (src.spectrum() == 4){
    int width = src.width();
        int height = src.height();
        int depth = src.depth();
    img = src.crop(0,0,0,0,width-1,height-1,depth-1,2).RGBtoYCbCr().channel(0).get_convolve(meanfilter);
    }

小记

说实话,这是我第一次对权威的代码(这应该算权威吧?)动手,只能说,代码总是人写的,总是会有bug的。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,268评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,669评论 4 61
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,873评论 0 17
  • 昨天刷微博,看到一个这样一条微博: 不禁默默点赞,这就是我啊。 不过除了以上这些特征,我觉得还应该有一个特征,那就...
    天亮星星出来啦阅读 3,674评论 0 1

友情链接更多精彩内容