资源简介
本程序是基于vc6.0的MFC界面,运用opencv库,实现了surf提取特征点及匹配,匹配效果极好,调试通过,可以直接运行

代码片段和文件信息
#include “stdafx.h“
#include “cvsurf.h“
//#include
#include
using namespace std;
#define ScanOctave (3)
#define FilterScale (4)
#define SamplingStep (1)
CV_INLINE CvSURFPoint cvSURFPoint( int x int y int laplacian int size int octave int scale )
{
CvSURFPoint p;
p.x = x;
p.y = y;
p.laplacian = laplacian;
p.size = size;
p.octave = octave;
p.scale = scale;
return p;
}
//计算箱式滤波器在x、y、xy方向上的对高斯二阶偏导的近似Dxx,Dyy,Dxy,参数依次为原始图像的积分图像、箱式滤波器、积分图像的列数
CV_INLINE double icvCalHaarPattern( int* originint* tint widthStep )
{
double d = 0;
int *p0 = 0 *p1 = 0 *p2 = 0 *p3 = 0;
int n = t[0];
for ( int k = 0; k < n; k++ )
{
p0 = origin+t[1]+t[2]*widthStep;
p1 = origin+t[1]+t[4]*widthStep;
p2 = origin+t[3]+t[2]*widthStep;
p3 = origin+t[3]+t[4]*widthStep;
d += (double)((*p3-*p2-*p1+*p0)*t[6])/(double)(t[5]);
t+=6;
}
return d;
}
//计算新的箱式滤波器来近似高斯核,参数依次为滤波器初始各矩形框坐标、滤波器新的各矩形框坐标、旧滤波器大小、新滤波器的大小
CV_INLINE void icvResizeHaarPattern( int* t_sint* t_dint OldSizeint NewSize )
{
int n = t_d[0] = t_s[0];
for ( int k = 0; k < n; k++ )
{
t_d[1] = t_s[1]*NewSize/OldSize;
t_d[2] = t_s[2]*NewSize/OldSize;
t_d[3] = t_s[3]*NewSize/OldSize;
t_d[4] = t_s[4]*NewSize/OldSize;
t_d[5] = (t_d[3]-t_d[1]+1)*(t_d[4]-t_d[2]+1);
t_d[6] = t_s[6];
t_d+=6;
t_s+=6;
}
}
template
CV_INLINE int
icvSign( Number x )
{
return (( x < 0 ) ? -1 : 1);
}
///////////////////源文件输出文档txt与Doc文档里的输出txt区别开来了//////////////////////
string filename(“G:\\surf响应信息.txt“);
ofstream ofs(filename.c_str());
///////////////////////////////////////////////////////////////////////////////////////
//计算关键点坐标,输入原始图像的积分图像,输出关键点的坐标,参数依次为原始图像的积分图像,内存空间,进行极大值抑制的参数
CvSeq* icvFastHessianDetector( const CvMat* sumCvMemStorage* storagedouble quality )
{
double t = (double)cvGetTickCount();
CvSeq* points = cvCreateSeq( 0 sizeof(CvSeq) sizeof(CvSURFPoint) storage );
CvMat* hessians[ScanOctave*(FilterScale+2)];
CvMat* traces[ScanOctave*(FilterScale+2)];
int size size_cache[ScanOctave*(FilterScale+2)];
int scale scale_cache[ScanOctave*(FilterScale+2)];
double *hessian_ptr *hessian_ptr_cache[ScanOctave*(FilterScale+2)];
double *trace_ptr *trace_ptr_cache[ScanOctave*(FilterScale+2)];
int dx_s[] = { 3 0 2 3 7 0 1 3 2 6 7 0 -2 6 2 9 7 0 1 };
int dy_s[] = { 3 2 0 7 3 0 1 2 3 7 6 0 -2 2 6 7 9 0 1 };
int dxy_s[] = { 4 1 1 4 4 0 1 5 1 8 4 0 -1 1 5 4 8 0 -1 5 5 8 8 0 1 };
int dx_t[] = { 3 0 2 3 7 0 1 3 2 6 7 0 -2 6 2 9 7 0 1 };
int dy_t[] = { 3 2 0 7 3 0 1 2 3 7 6 0 -2 2 6 7 9 0 1 };
int dxy_t[] = { 4 1 1 4 4 0 1 5 1 8 4 0 -1 1 5 4 8 0 -1 5 5 8 8 0 1 };
double dx = 0 dy = 0 dxy = 0;
int k = 0;
int hessian_rows hessian_rows_cache[ScanOctave*(FilterScale+2)];
int hessian_cols hessian_cols_cache[ScanOctave*(FilterScale+2)];
/* hessian detector */
for ( int o = 0; o < ScanOc
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-03-05 16:50 surf+MFC\
文件 57208 2011-09-11 21:36 surf+MFC\1.jpg
文件 97697 2008-04-22 15:35 surf+MFC\book.pgm
文件 50728 2012-07-03 06:55 surf+MFC\book.png
文件 22921 2013-02-28 10:23 surf+MFC\cvsurf.cpp
文件 728 2008-04-24 03:50 surf+MFC\cvsurf.h
目录 0 2013-03-05 16:49 surf+MFC\Debug\
文件 60906 2013-02-28 10:23 surf+MFC\Debug\cvsurf.obj
文件 0 2013-02-28 10:23 surf+MFC\Debug\cvsurf.sbr
文件 6456320 2013-03-05 16:49 surf+MFC\Debug\lsm.bsc
文件 159815 2013-03-05 16:49 surf+MFC\Debug\lsm.exe
文件 477960 2013-03-05 16:49 surf+MFC\Debug\lsm.ilk
文件 26107 2013-01-15 14:53 surf+MFC\Debug\lsm.obj
文件 7273884 2013-01-15 14:53 surf+MFC\Debug\lsm.pch
文件 656384 2013-03-05 16:49 surf+MFC\Debug\lsm.pdb
文件 7712 2013-03-05 16:49 surf+MFC\Debug\lsm.res
文件 0 2013-01-15 14:53 surf+MFC\Debug\lsm.sbr
文件 59010 2013-03-05 16:49 surf+MFC\Debug\lsmDoc.obj
文件 0 2013-03-05 16:49 surf+MFC\Debug\lsmDoc.sbr
文件 25653 2013-01-15 14:53 surf+MFC\Debug\lsmView.obj
文件 0 2013-01-15 14:53 surf+MFC\Debug\lsmView.sbr
文件 21902 2013-01-15 14:53 surf+MFC\Debug\lsmView2.obj
文件 0 2013-01-15 14:53 surf+MFC\Debug\lsmView2.sbr
文件 26426 2013-01-15 14:53 surf+MFC\Debug\MainFrm.obj
文件 0 2013-01-15 14:53 surf+MFC\Debug\MainFrm.sbr
文件 19349 2013-01-17 12:56 surf+MFC\Debug\OpenDialog.obj
文件 0 2013-01-17 12:56 surf+MFC\Debug\OpenDialog.sbr
文件 105991 2013-01-15 14:53 surf+MFC\Debug\StdAfx.obj
文件 1369703 2013-01-15 14:53 surf+MFC\Debug\StdAfx.sbr
文件 648192 2013-03-05 16:49 surf+MFC\Debug\vc60.idb
文件 536576 2013-03-05 16:49 surf+MFC\Debug\vc60.pdb
............此处省略33个文件信息
- 上一篇:SRAD算法C++实现
- 下一篇:完整扫雷源代码(C++MFC)
相关资源
- 移木块游戏,可以自编自玩,vc6.0编写
- MFC数字钟(基于VC6.0)
- 安科瑞智能电能表MODBUS通讯程序 VC6
- VC6LineNumberAddin.dll
- 用VC6.0实现多边形扫描线填充算法
- VC助手 VC6.0助手
- VC6.0 完整的图像处理程序 运用了大量
- VC6.0经典串口通信源程序C++
- VC6.0MFC界面美化
- 即时通讯开发源码终极版C#.NETC++都有
- 三维重建 特征点提取 立体匹配
- VS打开VC6.0所需libcd.lib
- MFC画圆自定义|位置|半径|边界和内部
- 用vc++6.0实现的银行账户管理系统
- vc6.0编程助手Visual_AssistX(含破解补丁
- VC6.0_MFC画图demo小程序源码
- Visual_assist_X_for_VC6.0破解版.rar
- VC开发MFC局域网屏幕监控系统完美版
- VC6.0三维画图画三维球,立方体,矩形
- VC6.0获取MAC地址
- vc6.0+opengl纯色五角星填充
- vc6.0+opengl动态绘制五角星
- VC6.0中缺少VC98\\\\CRT\\\\SRC文件夹的--
- 二叉树 VC6.0 MFC实现 数据结构
- VC++ MFC编写的2048小游戏工程及源代码
- Coons曲面与hermite、bezier、B样条曲线标
- VC6.0的使用工具AddOpen插件、字体/颜色
- 基于C++语言编写的宠物管理系统(V
- MFC VC6.0 简单贪吃蛇
- Opencv+VC6.0实现摄像头视频的监控
评论
共有 条评论