openCV中利用感知哈希算法是实现图片相似度计算

2025-05-28 02:08:51

1、我们还是使用之前人脸识别检测案例中保存的人脸图像进行图像的识别比对确定人脸图像保存的路径,在程序读取这些图片进行人脸相似度对比图像库保存路劲:f:\mm\1

openCV中利用感知哈希算法是实现图片相似度计算

4、使用pHash方法计算图片哈希值:string pHashValue(Mat &srcImg){ Mat img, dstImg; string rst(64, '\0'); double dIndex[64]; double mean = 0.0; int k = 0; cvtColor(srcImg, srcImg, CV_BGR2GRAY); img = Mat_<double>(srcImg); //缩放尺寸 resize(img, img, Size(8, 8)); //离散余弦变换 DCT dct(img, dstImg); //获取dct系数均值 for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { dIndex[k] = dstImg.at<double>(i, j); //计算每个像素的均值 mean += dstImg.at<double>(i, j) / 64; ++k; } } //计算hash for (int i = 0; i < 64; ++i) { if (dIndex[i] >= mean) { rst[i] = '1'; } else { rst[i] = '0'; } } return rst;}

openCV中利用感知哈希算法是实现图片相似度计算

6、创建main函数,加载图片、计算哈希值、计算汉明距离:int main(){Mat orgImg = imrea颊俄岿髭d("F:\\mm\\1\\img-1.jpg"); Mat img = imread("F:\\mm\\1\\img-2.jpg"); imshow("OrgImg", orgImg); imshow("Img", img); string str1 = imgHashValue(orgImg); string str2 = imgHashValue(img); int distance = hanmingDist(str1, str2); cout << "两张图片的汉明距离:" << distance << endl; if (distance < 5) { cout << "两张图片相似" << endl; } else { cout << "两张图片不相似" << endl; } str1 = pHashValue(orgImg); str2 = pHashValue(img); distance = hanmingDist(str1, str2); cout << "pHash两张图片的汉明距离:" << distance << endl; if (distance < 5) { cout << "两张图片相似" << endl; } else { cout << "两张图片不相似" << endl; } waitKey(0); return 0;}

openCV中利用感知哈希算法是实现图片相似度计算
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢