一在这里
搜索图片及相似度探秘 一

还是继续,准备了五幅图片

两个易烊千玺,两个肖战,一个地球星空
还是像上次那样,准备均值和标准差,但是这次,多了一个图片索引hash计算,这次计算的是整个图片的均值和hash,然后将缩小的图片减去均值,来求大于和小于的概率统计,因为并非真实图片的统计,是8*8 像素的图片统计,所以具有一定的概率性。ok,以下是代码

string compare_func()
{string retString = "{\"ret\":\"file is null\"}";Mat image1 = cv::imread("./y1.png", IMREAD_GRAYSCALE);Mat image2 = cv::imread("./y2.png", IMREAD_GRAYSCALE);Mat image3 = cv::imread("./x1.png", IMREAD_GRAYSCALE);Mat image4 = cv::imread("./x2.png", IMREAD_GRAYSCALE);Mat image5 = cv::imread("./earth.png", IMREAD_GRAYSCALE);    if (image1.empty() || image2.empty()){return retString;}Mat a1, a2,a3,a4,a5;cv::resize(image1, a1, cv::Size(8,8));cv::resize(image2, a2, cv::Size(8,8));cv::resize(image3, a3, cv::Size(8,8));cv::resize(image4, a4, cv::Size(8,8));cv::resize(image5, a5, cv::Size(8,8));Mat mat_mean1, mat_mean2, mat_mean3, mat_mean4, mat_mean5;Mat mat_stddev1, mat_stddev2, mat_stddev3, mat_stddev4, mat_stddev5;cv::meanStdDev(image1, mat_mean1, mat_stddev1);cv::meanStdDev(image2, mat_mean2, mat_stddev2);cv::meanStdDev(image3, mat_mean3, mat_stddev3);cv::meanStdDev(image4, mat_mean4, mat_stddev4);cv::meanStdDev(image5, mat_mean5, mat_stddev5);double m1,m2,m3,m4,m5, s1,s2,s3,s4,s5;m1 = mat_mean1.at<double>(0, 0);s1 = mat_stddev1.at<double>(0, 0);cout << "a1" << "灰度均值:" << m1 <<" std: "<<s1 <<endl;m2 = mat_mean2.at<double>(0, 0);s2 = mat_stddev2.at<double>(0, 0);cout << "a2" << "灰度均值:" << m2 << " std: " << s2 << endl;m3 = mat_mean3.at<double>(0, 0);s3 = mat_stddev3.at<double>(0, 0);cout << "a3" << "灰度均值:" << m3 << " std: " << s3 << endl;m4 = mat_mean4.at<double>(0, 0);s4 = mat_stddev4.at<double>(0, 0);cout << "a4" << "灰度均值:" << m4 << " std: " << s4 << endl;m5 = mat_mean5.at<double>(0, 0);s5 = mat_stddev5.at<double>(0, 0);cout << "a5" << "灰度均值:" << m5 << " std: " << s5 << endl;uint64_t v1 = 0;uint64_t v2 = 0;uint64_t v3 = 0;uint64_t v4 = 0;uint64_t v5 = 0;int offset = 64;for (int i = 0; i < 8; i++){uchar* x = a1.ptr<uchar>(i);uchar* y = a2.ptr<uchar>(i);uchar* z = a3.ptr<uchar>(i);uchar* q = a4.ptr<uchar>(i);uchar* e = a5.ptr<uchar>(i);for (int j = 0; j < 8; j++){offset--;if (x[j] > m1)v1 |= (uint64)1 << offset;if (y[j] > m2)v2 |= (uint64)1 << offset;if (z[j] > m3)v3 |= (uint64)1 << offset;if (q[j] > m4)v4 |= (uint64)1 << offset;if (e[j] > m5)v5 |= (uint64)1 << offset;}}int ret1 = compare_hash(v1, v2);int ret2 = compare_hash(v1, v3);int ret3 = compare_hash(v1, v4);int ret4 = compare_hash(v1, v5);cout << v1 << " " << v2<< " " << v3 <<" "<< v4 <<" "<<v5<<endl;cout << ret1 << " " << ret2 <<" "<< ret3<<" "<<ret4<< endl;imshow("1", image1);imshow("2", image2);imshow("3", image3);imshow("4", image4);imshow("5", image5);cv::waitKey(0);
}

比较hansh函数,每幅图是一个hash,当两幅图像的位值,也就是是0还是1,无论是0还是1,只要相等我们就将相似度加1.

int compare_hash(uint64_t target, uint64_t compare)
{int ret = 0;for (int i = 0;i < 64; i++){uint64_t a = (target >> i) << (63 - i);uint64_t b = (compare >> i) << (63 - i);if (a == b)ret++;}//1100110100001001return ret;
}

结果:

很可惜,根本就查不到相似之处,而且1和2 都是易烊千玺,3和4 都是肖战,但是均值和标准差并没有什么规律,hash值比较并没有比较出什么规律,说明方法都是失效的,ok,如何找到规律,才是我们要做的,这将在下一节继续努力,敬请期待。

搜索图片及相似度探秘 二相关推荐

  1. 搜索图片及相似度探秘 一

    均值和标准差 一副图片的均值和标准差是可以看出两幅图片的差异的,首先我们把两幅图片缩放到足够小的状态,例如8*8 cv::resize(image1, a1, cv::Size(8,8)); 计算标准 ...

  2. 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列

    剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...

  3. 安卓流畅度测试方法二:FPS Meter测试安卓帧数

    http://pcedu.pconline.com.cn/508/5084799_1.html http://pcedu.pconline.com.cn/508/5084799_1.html http ...

  4. 可视化工具gephi源码探秘(二)---导入netbeans

    在上篇<可视化工具gephi源码探秘(一)>中主要介绍了如何将gephi的源码导入myeclipse中遇到的一些问题,此篇接着上篇而来,主要讲解当下通过myeclipse导入gephi源码 ...

  5. 白话Elasticsearch12-深度探秘搜索技术之基于multi_match + best fields语法实现dis_max+tie_breaker

    文章目录 概述 官网 示例 概述 继续跟中华石杉老师学习ES,第十二篇 课程地址: https://www.roncoo.com/view/55 官网 https://www.elastic.co/g ...

  6. 人行征信报告(下)——探秘二代征信的内容

    最近一些持牌机构的同学在本月底之前都有些忙碌,根据之前的<中国人民银行征信中心关于做好二代征信系统上线准备工作的通知>要求, 2019 年 11 月 30 日前需要完成与二代征信系统之间的 ...

  7. python将矩阵顺时针旋转90度_python 二维数组90度旋转的方法

    如下所示: #!/usr/bin/env python #-*- coding: utf-8 -*- """ [0, 1, 2, 3] [0, 1, 2, 3] [0, ...

  8. python如何寻找两个相似的文件_如何计算两个文档的相似度(二)

    上一节我们介绍了一些背景知识以及gensim , 相信很多同学已经尝试过了.这一节将从gensim最基本的安装讲起,然后举一个非常简单的例子用以说明如何使用gensim,下一节再介绍其在课程图谱上的应 ...

  9. 白话Elasticsearch20-深度探秘搜索技术之使用rescoring机制优化近似匹配搜索的性能

    文章目录 概述 官网 match和phrase match(proximity match)区别 优化proximity match的性能 概述 继续跟中华石杉老师学习ES,第19篇 课程地址: ht ...

最新文章

  1. Linux_查看CPU信息、机器型号等硬件信息
  2. maven快照版本机制详解
  3. linux 查看文件和文件夹大小
  4. Android Custom View ----invalidate() 、postInvalidate() and requestLayout()
  5. 最短路径 - 迪杰斯特拉(Dijkstra)算法
  6. php生成随机密码的几种方法
  7. Linux安装使用redis
  8. Android java和C的Socket通信demo(可用)
  9. 《编译原理及实践教程》第一章学习笔记
  10. 【单例模式、多例模式、枚举、工厂模式】
  11. 人民币与美元汇率兑换程序
  12. 黄金矿工小游戏制作步骤
  13. 京东零售大数据云原生平台化实践
  14. windows下,配置apache2.4.39执行typhon生成的cgi程序
  15. DTD与shema学习
  16. JAVA核心知识点之 数据结构:总结概述
  17. 票据撮合区块链系统开发-去中心化的新型票据交易展现形式的系统
  18. 华为HCIA-RS(H12-211)V2.5题库带答案
  19. 小米android框架服务,快应用服务框架下载
  20. Socket/Tcp游戏通信(一)-IP和端口号

热门文章

  1. MFC开发IM-如何解决“转到定义”却跳转头文件,不跳实现
  2. c语言 获取系统版本,[原创]C/C++ 实现获取Windows操作系统版本信息
  3. 控制文件夹递归深度_TensorFlow、Pytorch和Keras的样例资源(深度学习初学者必须收藏)...
  4. JavaScript图片幻灯片显示效果
  5. 爱奇艺、腾讯视频等接连涨价 地主家也没有余粮了?
  6. iPhone 13 Pro苍岭绿真机首曝!网友:这次iPhone被渲染图坑惨了
  7. 三星Galaxy S22 Ultra发布推迟:此前至少5款骁龙8平台旗舰亮相
  8. 消息人士:欧盟下月将对英伟达收购Arm交易展开正式调查
  9. 太扎心!10亿网民:4成初中学历,月收入超5000元不足3成
  10. 暖心!湖北伢雷军为家乡再捐1270万 大批紧缺医护物资连夜运抵武汉