资源简介
本程序是基于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的OpenGL小动画代码
- DES MFC实现在VC6.0中
- VC6.0+MFC+USBCAN上位机通信控制
- 队列应用银行排队问题模拟:计算客户
- vc6.0实现的局域网聊天室MFC+SOCKRT
- VC6.0贪吃蛇MFC
- 标准化考试系统 C++课设
- DEM——三维地形可视化
- VC6.0环境下dda直线画法
- 北航2006-2017研究生复试上机源码_vc6
- VC6.0助手 VA_X_Setup1823VC6.0助
- MFC(VC6.0和VS2008)采用ADO访问access数据
- VC6.0 多国语言切换(DLL版本,包含D
- 用c语言进行图片处理
- 贪吃蛇(有完全源码和每一个功能的
- Visual_assist_X_for_VC6.0破解版.zip
- SIFT算法_全景图像拼接VC源码有中文注
- gdi+游戏框架这是一个用vc6.0写的Win3
- vc6.0实现的计算机图形学各种算法源代
- VC++串口通信源代码VC6.0
- vc6.0 完整的文本编辑器源码
- VC6.0 winsock编程.pdf
- SURF特征点检测 程序 by浅墨
- 飞机飞行源代码VC6.0
- SDKvc6.0用
- MFC记事本vc6.0下开发
- vc6.0的MFC实现简单的俄罗斯方块小游戏
- vc6.0下mfc控件加载jpg格式图片
- VC6.0 OpenCV 摄像头程序
- VC6.0--计算器
评论
共有 条评论