OpenCV实现均值哈希

总共分三步:压缩,灰度化,均值化,求哈希值。
1.压缩

void secondMethod(char* filename, char* savename) { //const char* filename2 = filename.c_str(); //const char* savename2 = savename.c_str(); //第一幅图像的参数 IplImage* img = NULL; //OpenCV图像数据结构指针 int width, height; //图像的宽和高 //char* filename = "E:\\Pictures\\Me\\portrait.png"; //要打开图像的路径 img = cvLoadImage(filename, 1); //打开图像,这个过去其实也完成了图像的解码,图像的信息存在IplImage指针所指的数据结构中 uchar* data = https://www.it610.com/article/(uchar*)(img->imageData); //声明指针指向图像的数据区 width = img->width; //图像的宽 height = img->height; //图像的高IplImage* img2; //均值后的图像 //char* savename = "E:\\Pictures\\Me\\portrait4.png"; //要存储图像的路径 img2 = cvCreateImage(cvSize(8, 8), img->depth, img->nChannels); //新建8X8的图像//图像压缩,将任意图像压缩成8x8的图像,保存到img2中 中间变量 int img2data[3][8][8]; //8x8列的数组 //其实应该是[8][8][3]还是[3][8][8] //不能设为uchar类型 int widthTime, heightTime; //平均每个像素需要合并的次数 widthTime = width/8; heightTime = height/8; std::cout<<"widthTime:"<
文章图片

压缩:OpenCV实现均值哈希
文章图片

灰值化:OpenCV实现均值哈希
文章图片

均值化:OpenCV实现均值哈希
文章图片

哈希值:OpenCV实现均值哈希
文章图片

这时候,比较两个图片的相似性,就是先计算这两张图片的hash指纹,也就是64位0或1值,然后计算不同位的个数(汉明距离)。如果这个值为0,则表示这两张图片非常相似,如果汉明距离小于5,则表示有些不同,但比较相近,如果汉明距离大于10则表明完全不同的图片。(该段转自:原文。)
【OpenCV实现均值哈希】转载于:https://www.cnblogs.com/2008nmj/p/7390519.html

    推荐阅读