opencv计算两个轮廓之间hu矩相似程度,MatchShapes-程序员宅基地

技术标签: matlab  python  人工智能  

https://blog.csdn.net/jiake_yang/article/details/52589063

【OpenCV3.3】通过透视变换矫正变形图像 https://blog.csdn.net/rrrfff/article/details/77340641

OPENCV提供了输入图像直接进行hu矩匹配的函数,返回的是两个图像或轮廓之间hu矩的相似度:

double cvMatchShapes(const void*object1,const void*object2,int method,doubleparameter=0);

计算两个轮廓之间hu矩相似程度:


#include <iostream>
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
using namespace std;

CvSeq *getImageContours(CvArr *src)
{
cvThreshold(src, src, 100, 255, CV_THRESH_BINARY);
CvMemStorage * storage = cvCreateMemStorage(0);
CvSeq * contours;
cvFindContours(src, storage, &contours);
return contours;
}
int main()
{
IplImage *src1 = cvLoadImage("", 0);
CvSeq *contours1 = getImageContours(src1); // 得到src1的轮廓
IplImage *src2 = cvLoadImage("", 0);
CvSeq *contours2 = getImageContours(src2);
double result = cvMatchShapes(contours1, contours2, 1); // 根据输入的图像或轮廓来计算它们的hu矩的相似度
cout << result << endl;
cvReleaseMemStorage(&contours1->storage);
cvReleaseMemStorage(&contours1->storage);
cvReleaseImage(&src1);
cvReleaseImage(&src2);
return 0;
}
给出了10副图片2.jpg  3.jpg.....11.jpg

其中2.jpg和11.jpg非常相似,我们代码是要实现的在3~11.jgp找到与2.jpg最相似的图片。

代码:


#include <iostream>
#include <string>
#include <sstream>
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
using namespace std;

int main()
{
IplImage *srcColor = cvLoadImage("E:\\study_opencv_video\\lesson15_3\\2.jpg", 1);
IplImage *src = cvCreateImage(cvGetSize(srcColor), 8, 1);
cvCvtColor(srcColor, src, CV_BGR2GRAY);
if(!src)
{
cout << "No Image Load" << endl;
}
int i;
stringstream ss;
string path;
string str;
IplImage *dst = NULL, *dstColor;
char c[256];
double result, maxResult= 1000 * 256 *256;
IplImage *resultMap = NULL;
for (i = 3; i < 12; i ++)
{
path = "E:\\study_opencv_video\\lesson15_3\\";
ss.clear();
ss << i;
ss >> str;
str += ".jpg";
path += str;
ss.clear();
ss << path;
ss >> c;
dstColor = cvLoadImage(c,1); //读取图片
dst = cvCreateImage(cvGetSize(dstColor), 8, 1);
cvCvtColor(dstColor, dst, CV_BGR2GRAY);
result = cvMatchShapes(src, dst, 1);
if(maxResult > result) //求最大相似
{
resultMap = cvCreateImage(cvGetSize(dstColor), 8, 3);
maxResult = result;
cvCopy(dstColor, resultMap);
}
}
cvNamedWindow("srcColor", 0);
cvNamedWindow("resultMap",0);
cvShowImage("resultMap", resultMap);
cvShowImage("srcColor", srcColor);
cvWaitKey(0);
cvReleaseImage(&src);
cvReleaseImage(&srcColor);
cvReleaseImage(&dst);
cvReleaseImage(&dstColor);
cvReleaseImage(&resultMap);
cvDestroyWindow("srcColor");
cvDestroyWindow("resultMap");
return 0;
}

转载于:https://www.cnblogs.com/jukan/p/10484726.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30772261/article/details/95578574

智能推荐

SpringBoot统一异常通用处理_spring boot <root level="error">-程序员宅基地

文章浏览阅读352次。一 日志1 什么是日志通过日志查看程序的运行过程,运行信息,异常信息等。2 配置日志级别日志记录器(Logger)的行为是分等级的。一般分为:FATAL(致命)、ERROR(错误)、WARN(警告)、INFO(信息)、DEBUG(调试)默认情况下,spring boot从控制台打印出来的日志级别只有INFO及以上级别,可以配置日志级别# 设置日志级别为ERRORlogging: level: root: ERROR这种方式能将ERROR级别以及以上级别的日志打_spring boot

Microsoft .NET Framework 安装未成功(证书方面)-程序员宅基地

文章浏览阅读4.3k次。问题:在为windows7 sp1安装framework 4.6.2的时候,有两次证书方面的报错// 错误1:无法建立到信任根颁发机构的证书链// 错误2:已处理证书链,但是在不受信任的根证书中终止查找资料:经过查找,发现在4.6的前期版本,就已经有过次问题的解决方案,比如类似的文章:.NET Framework 4.6.1/4.6 的安全性更新 31360..._netframework4.6.2安装未成功

CAN总线的物理层分析(三)_can物理层需求分析-程序员宅基地

文章浏览阅读2.4k次。一、CAN拓扑网络连接在CAN总线上的设备叫做节点设备(CAN Node),CAN网络的拓扑一般为线型。线束最常用的是双绞线,线上传输为对称的差分电平信号。下图为CAN总线网络示意图,节点主要包括Host、控制器和收发器。Host常集成有CAN控制器,CAN控制器负责处理协议相关功能,以减轻Host的负担。CAN收发器将控制器连接到传输媒介。通常控制器和总线收发器通过光耦或磁耦隔离,这样即使总..._can物理层需求分析

2020解读中国互联网:局部领先、快进的数字化发展_解读中国互联网:局部领先-程序员宅基地

文章浏览阅读133次。局部领先的当前格局:中国互联网特色分明,部分领域世界领先应对不确定性,是未来十年数字经济发展的重要命题。突如其来的新冠疫情为全球发展秩序带来了巨大的不确定性,政府、企业和个体迅速进入了一场全社会参与的数字化实验,以数字化作为应对不确定性的有效方针。在全社会数字化的进程中,中◿互联网“数智化”的步伐加快,呈现以下特色格局:在产业端,局部领先全球:产业互联网发展水平在不同行业差异明显。在需求端个性化程度高且供给端分散的行业,例如餐饮、服饰等,数字化程度已开始引领全球,互联网巨头赋能行业供应链各环节的B端企业_解读中国互联网:局部领先

随便推点

自然语言处理与AI语言模型的道德与法律问题-程序员宅基地

文章浏览阅读263次,点赞5次,收藏3次。1.背景介绍1. 背景介绍自然语言处理(NLP)是人工智能领域的一个重要分支,旨在让计算机理解、生成和处理人类语言。随着深度学习技术的发展,AI语言模型(例如GPT-3、BERT等)在语言理解和生成方面取得了显著进展。然而,这些模型也引发了一系列道德和法律问题,需要我们深入思考和解决。本文将从以下几个方面探讨NLP和AI语言模型的道德与法律问题:数据收集与隐私保护模型偏见与公平...

Python之Request库的安装_request whl-程序员宅基地

文章浏览阅读1.8w次,点赞5次,收藏33次。方法一:以管理员身份运行cmd,执行 pip install requests若撞墙,可以试试 pip --trusted-host pypi.python.org install requests还不行的话,在撞墙的link上获取压缩包,解压后执行进入文件夹的命令(以我的为例)cd C:\Program Files\Python36\Lib\requests-2.7.0进入文件夹,执行安装命令..._request whl

JSON的三种解析方式以及JSONObject、Map、JSONArray、ArrayList的区别_jsonobject map-程序员宅基地

文章浏览阅读3.2k次,点赞4次,收藏13次。目录一、JSON1. 什么是JSON?2. JSON字符串和JSON对象的区别3. JSON解析4. 举例说明二、JSON和Map、JSONArray和ArrayList的区别一、JSON1. 什么是JSON?2. JSON字符串和JSON对象的区别3. JSON解析4. 举例说明二、JSON和Map、JSONArray和ArrayList的区别一、JSON..._jsonobject map

在本地用 Navicat 连接远程数据库报错:Can't connect to MySQL server on 。。。_cant connect to mysql server on navicat-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏2次。在腾讯云新买了一台服务器,环境都安装好了,在本地用 Navicat 连接数据库,就是连接不上,一直报错Can’t connect to MySQL server on 。。。搞了三四个小时,终于搞定,分享一下过程。一、检查用户授权 1.进入ubuntu mysql命令界面,查看root用户授权show grants for 'root'@'%'; 2.如果没有授权记录,新增用户CREATE USE_cant connect to mysql server on navicat

roary数据输入,参数设置,结果文件-程序员宅基地

文章浏览阅读3.9k次,点赞4次,收藏19次。1.数据输入(1)Roary 的输入端需要 gff 格式的数据文件。由于 NCBI 下载的 gff 是不含核酸序列的 gff 格式文件,无法直接用来分析。Prokka 生成的 gff 格式文件包含核酸序列,所以可以下载 NCBI 上的 fna 文件然后用 prokka 注释后再用 roary 分析。(2)所有参与计算的gff放进一个文件夹2.参数设置(1)roary 用 blastp 对 gff 文件中的序列进行 orthologs 分析,获得 pangenome 和 coregenome 结果,还_roary

网站显示不出来,怎么排查?_网站访问不了抓包判断-程序员宅基地

文章浏览阅读954次。网站显示不出来,怎么排查?_网站访问不了抓包判断