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:"<
文章图片
压缩:
文章图片
灰值化:
文章图片
均值化:
文章图片
哈希值:
文章图片
这时候,比较两个图片的相似性,就是先计算这两张图片的hash指纹,也就是64位0或1值,然后计算不同位的个数(汉明距离)。如果这个值为0,则表示这两张图片非常相似,如果汉明距离小于5,则表示有些不同,但比较相近,如果汉明距离大于10则表明完全不同的图片。(该段转自:原文。)
【OpenCV实现均值哈希】转载于:https://www.cnblogs.com/2008nmj/p/7390519.html
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 孩子不是实现父母欲望的工具——林哈夫
- opencv|opencv C++模板匹配的简单实现
- Java|Java OpenCV图像处理之SIFT角点检测详解
- Node.js中readline模块实现终端输入
- java中如何实现重建二叉树
- 人脸识别|【人脸识别系列】| 实现自动化妆
- paddle|动手从头实现LSTM