opencv计算两个轮廓之间hu矩相似程度,MatchShapes
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;
}
opencv计算两个轮廓之间hu矩相似程度,MatchShapes的更多相关文章
- IOS 计算两个经纬度之间的距离
IOS 计算两个经纬度之间的距离 一 丶 -(double)distanceBetweenOrderBy:(double) lat1 :(double) lat2 :(double) lng1 :(d ...
- java中计算两个日期之间天数的程序设计。
//用java编写出一个以下方法计算两个日期之间天数的程序设计. import java.util.regex.Matcher; import java.util.regex.Pattern; pub ...
- java计算两个日期之间相隔的天数
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...
- PHP 计算两个时间戳之间相差的时间
//功能:计算两个时间戳之间相差的日时分秒 //$begin_time 开始时间戳 //$end_time 结束时间戳 function timediff($begin_time,$end_time) ...
- 高德地图 API 计算两个城市之间的距离
1. 目前在项目中,遇到一个需求不会做,就是要计算两个城市之间的距离,而这两个城市的输入是可变的,如果要使用数据库来先存储两地之间的距离,调用的时候再来调用,那么存数据的时候,要哭的,因为光是省级区域 ...
- java计算两个日期之间相隔的月份(向下取整)
最近需求里面有个需要计算两个日期之间相隔的月份,写起来还挺繁琐,需要将各种情况都要考虑到,写了一个作为以后自己的工具吧. //获取哪一天 public static int getDay(Date d ...
- 计算两个NSDate之间,相隔多少秒数
计算两个NSDate之间,相隔多少秒数 //两个时间间隔秒数 - (NSInteger)intervalSecondsWithSmallDate:(NSDate*)smallDate bigDate: ...
- PHP计算两个时间戳之间间隔时分秒
/功能:计算两个时间戳之间相差的日时分秒//$begin_time 开始时间戳//$end_time 结束时间戳function timediff($begin_time,$end_time){ if ...
- JS计算两个日期之间的天数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- Tomcat启动报错:This file is needed to run this program
Tomcat版本为 8.5.29. 1.情景 kill调用tomcat进程后,重启tomcat报如下错误: Cannot find /usr/local/apache-tomcat-/bin/setc ...
- classmethod作用
>>> class A(object): bar = 1 def func1(self): print 'foo' >>> class A(object): bar ...
- E - Stones 优先队列
来源1896 Because of the wrong status of the bicycle, Sempr begin to walk east to west every morning an ...
- iptables共享上网
1.1 流程大概如下: 1.环境准备 内部服务器B 内网172.16.1.12 ifdown eth0 #首先关闭外网网卡 route add default gw 172.16.1.11 #把上图中 ...
- Ubuntu常用操作命令
解压文件: tar -zxvf 文件名 -C 指定目录 从当前环境进入root环境: su,然后输入root密码
- php中,echo,print,var_dump的三个区别
1.echo语句 echo - 能够输出一个以上的字符串 <?php echo "<h2>www.dc3688.com</h2>"; ...
- HTML、CSS知识点,面试开发都会需要--No.7 数据列表
No.7 数据列表 1.无序列表Unordered List 无序列表用block-level元素ul(unordered list)表示,每个item单独使用li(list)标记.如下代码所示: & ...
- [No0000C6]Visual Studio 2017 函数头显示引用个数
Visual Studio 2017 函数头显示引用个数
- 【模拟与阅读理解】Gym - 101954C Rullete
http://codeforces.com/gym/101954/problem/C 题意:14行伪代码让你翻译. 坑得yibi #include<stdio.h> #include< ...
- 网络对抗实验一 逆向及Bof基础实践
网络对抗实验一 逆向及Bof基础实践 一.实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. ...