Google图像对比基本算法的简单实现

Google图像对比基本算法的简单实现,第1张

概述Google图像对比基本算法的简单实现

下面是内存溢出 jb51.cc 通过网络收集整理的代码片段。

内存溢出小编现在分享给大家,也给大家做个参考。

#include <cv.h>#include <highgui.h>#include <stdlib.h>  //计算图像感知hash值。详情看:http://blog.csdn.net/lhfslhfs/article/details/9157845int64 CalcImagePerceptualHashKey(const Iplimage* pImage){    Iplimage* pTheImage8X8 = cvCreateImage(cvSize(8,8),pImage->depth,pImage->nChannels);    Iplimage* pGrayscaleImage = cvCreateImage(cvSize(8,8,1);      cvResize(pImage,pTheImage8X8,CV_INTER_AREA);    cvConvertimage(pTheImage8X8,pGrayscaleImage);    cvReleaseImage(&pTheImage8X8);          //计算平均值    float fElementMean = 0;    for (int y = 0; y < 8; ++y)    {        for (int x = 0; x < 8; ++x)        {            unsigned char& cElem = *(unsigned char*)(pGrayscaleImage->imageData + x + y * pGrayscaleImage->wIDthStep);            cElem = (unsigned char)(cElem / (float)255 * 64);            fElementMean += cElem;        }    }      fElementMean /= 64;    unsigned char cElementKey = 0;    int64 key = 0;    unsigned char* pKeyPtr = (unsigned char*)&key;      for (int y = 0; y < 8; ++y)    {        for (int x = 0; x < 8; ++x)        {            if (fElementMean > *(unsigned char*)(pGrayscaleImage->imageData + x + y * pGrayscaleImage->wIDthStep))            {                //小于平均值即为0。                cElementKey <<= 1;            }            else            {                //否则即为1                cElementKey <<= 1;                cElementKey |= 1;            }        }          pKeyPtr[y] = cElementKey;    }      cvReleaseImage(&pGrayscaleImage);    return key;}  //比较2个key的相似度,结果以1为最相似,0为不相似。float CompareImageKeySimilarity(int64 key1,int64 key2){    int64 keyResult = key1 ^ key2;    int nOneCount = 0;    int i = 64;    while(i--)    {        if ((keyResult & 1) == 1)            nOneCount++;          keyResult >>= 1;    }      printf("nOneCount = %dn",nOneCount);    return nOneCount == 0 ? 1 : (64 - nOneCount) / (float)64;}  int main(int argc,char* argv[]){    Iplimage* pSrc1 = cvLoadImage("D:\cvimg\gujinlin1.jpg");    Iplimage* pSrc2 = cvLoadImage("D:\cvimg\gujinlin2.jpg");    int64 key1 = CalcImagePerceptualHashKey(pSrc1);    int64 key2 = CalcImagePerceptualHashKey(pSrc2);      printf("key1 = 0x%llX,key2 = 0x%llX,Similarity = %.2fn",key1,key2,CompareImageKeySimilarity(key1,key2));    return 0;}

以上是内存溢出(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

总结

以上是内存溢出为你收集整理的Google图像对比基本算法的简单实现全部内容,希望文章能够帮你解决Google图像对比基本算法的简单实现所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1232289.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存