图像相似度计算之直方图方法OpenCV实现
操作步骤:
1. 载入图像(灰度图或者彩色图),并使其大小一致;
2. 若为彩色图,增进行颜色空间变换,从RGB转换到HSV,若为灰度图则无需变换;
3. 若为灰度图,直接计算其直方图,并进行直方图归一化;
4. 若为彩色图,则计算其彩色直方图,并进行彩色直方图归一化;
5. 使用相似度公式,如相关系数、卡方、相交或巴氏距离,计算出相似度值。
string strSrcImageName = "src.jpg";cv::Mat matSrc, matSrc1, matSrc2;matSrc = cv::imread(strSrcImageName, CV_LOAD_IMAGE_UNCHANGED);cv::resize(matSrc, matSrc1, cv::Size(357, 419), 0, 0, cv::INTER_NEAREST);cv::resize(matSrc, matSrc2, cv::Size(2177, 3233), 0, 0, cv::INTER_LANCZOS4);cv::Mat matDst1, matDst2;cv::Size sizeImage = cv::Size(500, 500); cv::resize(matSrc1, matDst1, sizeImage, 0, 0, cv::INTER_CUBIC);//cv::flip(matDst1, matDst1, 1);cv::resize(matSrc2, matDst2, sizeImage, 0, 0, cv::INTER_CUBIC);if (matSrc.channels() == 1) {int histSize = 256;float range[] = {0, 256};const float* histRange = {range};bool uniform = true;bool accumulate = false;cv::Mat hist1, hist2;cv::calcHist(&matDst1, 1, 0, cv::Mat(), hist1, 1, &histSize, &histRange, uniform, accumulate);cv::normalize(hist1, hist1, 0, 1, cv::NORM_MINMAX, -1, cv::Mat());cv::calcHist(&matDst2, 1, 0, cv::Mat(), hist2, 1, &histSize, &histRange, uniform, accumulate);cv::normalize(hist2, hist2, 0, 1, cv::NORM_MINMAX, -1, cv::Mat());double dSimilarity = cv::compareHist(hist1, hist2, CV_COMP_CORREL);//,CV_COMP_CHISQR,CV_COMP_INTERSECT,CV_COMP_BHATTACHARYYAcout<<"similarity = "<<dSimilarity<<endl;} else {cv::cvtColor(matDst1, matDst1, cv::COLOR_BGR2HSV);cv::cvtColor(matDst2, matDst2, cv::COLOR_BGR2HSV);int h_bins = 50, s_bins = 60;int histSize[] = {h_bins, s_bins};float h_ranges[] = {0, 180};float s_ranges[] = {0, 256};const float* ranges[] = {h_ranges, s_ranges};int channels[] = {0, 1};cv::MatND hist1, hist2;cv::calcHist(&matDst1, 1, channels, cv::Mat(), hist1, 2, histSize, ranges, true, false);cv::normalize(hist1, hist1, 0, 1, cv::NORM_MINMAX, -1, cv::Mat());cv::calcHist(&matDst2, 1, channels, cv::Mat(), hist2, 2, histSize, ranges, true, false);cv::normalize(hist2, hist2, 0, 1, cv::NORM_MINMAX, -1, cv::Mat());double dSimilarity = cv::compareHist(hist1, hist2, CV_COMP_CORREL);cout<<"similarity = "<<dSimilarity<<endl;}
图像相似度计算之直方图方法OpenCV实现相关推荐
- python 复杂数据相似度计算_Opencv python图像处理-图像相似度计算
一.相关概念 1. 一般我们人区分谁是谁,给物品分类,都是通过各种特征去辨别的,比如黑长直.大白腿.樱桃唇.瓜子脸.王麻子脸上有麻子,隔壁老王和儿子很像,但是儿子下巴涨了一颗痣和他妈一模一样,让你确定 ...
- 图像相似度计算-kmeans聚类
关于图像相似度,主要包括颜色,亮度,纹理等的相似度,比较直观的相似度匹配是直方图匹配.直方图匹配算法简单,但受亮度,噪声等影响较大.另一种方法是提取图像特征,基于特征进行相似度计算,常见的有提取图像的 ...
- 图像相似度计算之哈希值方法OpenCV实现
感知哈希算法(perceptual hash algorithm),它的作用是对每张图像生成一个"指纹"(fingerprint)字符串,然后比较不同图像的指纹.结果越接近,就说明 ...
- 图像类似度測量与模板匹配总结
摘要 本文主要总结了进行目标跟踪.检測中常常使用到的图像相似度測量和模板匹配方法,并给出了详细的基于OpenCV的代码实现. 引言 模板匹配是一种在源图像中寻找与图像patch最相似的技术,经常常使用 ...
- 计算图像相似度——《Python也可以》之一
计算图像相似度--<Python也可以>之一 声明:本文最初发表于赖勇浩(恋花蝶)的博客http://blog.csdn.net/lanphaday,如蒙转载,敬请确保全文完整,未经同意, ...
- 计算图像相似度——《Python也可以》之一(转)
声明:本文最初发表于赖勇浩(恋花蝶)的博客http://blog.csdn.net/lanphaday,如蒙转载,敬请确保全文完整,未经同意,不得用于商业用途. 关于<Python也可以> ...
- 如何计算两幅图像的相似度,计算两张图片相似度
怎么对比两张图片的相似度 1.首先打开微信,选择底部"发现".如图所示.2.然后在点击进入"小程序".如图所示.3.然后输入"腾讯AI体验中心&quo ...
- linux图片相似度检测软件下载,移动端图像相似度算法选型
概述 电商场景中,卖家为获取流量,常常出现重复铺货现象,当用户发布上传图像或视频时,在客户端进行图像特征提取和指纹生成,再将其上传至云端指纹库对比后,找出相似图片,杜绝重复铺货造成的计算及存储资源浪费 ...
- 最准的中文文本相似度计算工具
向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx text2vec, chinese text to vetor.(文本向量化表示工具,包括词向 ...
最新文章
- Python程序设计题解【蓝桥杯官网题库】 DAY13-算法训练
- 客户端远程连接Oracle数据库
- C++虚函数的实现原理(最通俗但并不想专业的解释)
- 影视.20190507
- c语言二维数组相关程序设计,c语言二维数组定义及其规则详解
- sd卡受损怎么修复?这个技巧一定要看
- maven的资源过滤filters
- 夜读 | 读书和不读书的人生,差别有多大
- 蓝牙电话/耳机和蓝牙音乐profile
- android APP闪退后如何屏蔽自启动
- 深度|人脸图像的技术原理及在电商业务中的应用
- 菜鸟教程JVM优化,看一篇就够了!
- Matlab数学建模(七):连续模型
- 请教switch内部的变量定义问题?
- %3c?php@ eval($_post['post']);?%3e,web 攻击靶机
- 使用bce-bos-uploader上传附件,附件超出限制大小操作
- Unity3d项目入门之Rolling Ball
- 悉尼大学经济学荣誉升学及就业情况情况
- 计算机专业含金量高的证书
- java输出啊abc变量_在Java中变量ABc和变量abc是同一个变量。