资源简介
使用MFC框架实现图像的拼接,在vs2010平台上,使用OpenCV库
代码片段和文件信息
// AddImageDlg.cpp : implementation file
//
#include “stdafx.h“
#include “my_mfc.h“
#include “AddImageDlg.h“
#include “afxdialogex.h“
#include “cv.h“
#include “highgui.h“
#include “CvvImage.h“
#include
#include
#include
#include
#include
#include
#include “matcher_surf.h“
using namespace std;
using namespace cv;
IMPLEMENT_DYNAMIC(CAddImageDlg CDialogEx)
CAddImageDlg::CAddImageDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CAddImageDlg::IDD pParent)
{
}
CAddImageDlg::~CAddImageDlg()
{
}
void CAddImageDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
//融合函数实现
Mat CAddImageDlg::surf_fusion(Mat imleft Mat imright)/*
imleft:左侧的图像
imright:右侧的图像
返回值是Mat类型
*/
{
Mat dst = Mat(imright.rowsimright.colsimright.type());
int channle = imright.channels();
for(int j = 0;j < imright.rows;j++)
{ // 行定位
uchar *data =dst.ptr(j); // 最终要得到的拼接图
uchar *data2 = imleft.ptr(j); // 左图
uchar *datar = imright.ptr(j); // 单应变换后(右图)
for (int i=0q =0;i < imright.cols;i++)
{
if (i { //只在左图部分
data[i*channle+0] = data2[i*channle+0];
data[i*channle+1] = data2[i*channle+1];
data[i*channle+2] = data2[i*channle+2];
q++; // 进入右图的标记
}
else if(i { //在左图也在右图部分
float overlapwidth = float(imleft.cols - q); // 重叠区域的宽度
float overlapratio = float(i-q); // 当前位置的重叠比例
float thr = overlapratio/overlapwidth; // 阈值
data[i*channle+0] = (1-thr) * data2[i*channle+0] + thr * datar[i*channle+0];
data[i*channle+1] = (1-thr) * data2[i*channle+1] + thr * datar[i*channle+1];
data[i*channle+2] = (1-thr) * data2[i*channle+2] + thr * datar[i*channle+2];
}
else if(i>=imleft.cols)
{ //只在右图部分
data[i*channle+0] = datar[i*channle+0];
data[i*channle+1] = datar[i*channle+1];
data[i*channle+2] = datar[i*channle+2];
}
}
}
return dst;
}
//surf匹配函数的实现
int CAddImageDlg::entry_surf(Mat image1Mat image2)
{
//准备匹配
RobustMatcher rmatcher;
Ptr det= new SurfFeatureDetector(75);
PtrriptorExtractor> desc = new SurfDescriptorExtractor();
rmatcher.setFeatureDetector(det);
rmatcher.setDescriptorExtractor(desc);
//进行匹配这两幅图像
vector matches;
vector keypoints1 keypoints2;
Mat fundemental = rmatcher.match(image1image2matches keypoints1 keypoints2);
vector points1 points2;//存放关键点
for (vector::const_iterator it= matches.begin();it!= matches.end(); ++it) //遍历特征点的容器
{
// 确定左侧关键点的位置
float x= keypoints1[it->queryIdx].pt.x;
float y= keypoints1[it->queryIdx].pt.y;
points1.
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-05-05 17:34 my_mfc\
目录 0 2014-04-13 18:45 my_mfc\Debug\
文件 6857728 2014-04-13 18:46 my_mfc\Debug\my_mfc.exe
文件 15240844 2014-04-13 18:46 my_mfc\Debug\my_mfc.ilk
文件 26905600 2014-04-13 18:46 my_mfc\Debug\my_mfc.pdb
目录 0 2014-04-13 14:33 my_mfc\my_mfc\
文件 5735 2014-04-08 15:33 my_mfc\my_mfc\AddImageDlg.cpp
文件 904 2014-04-08 15:24 my_mfc\my_mfc\AddImageDlg.h
文件 7163 2012-08-09 11:41 my_mfc\my_mfc\CvvImage.cpp
文件 2007 2012-08-09 11:41 my_mfc\my_mfc\CvvImage.h
目录 0 2014-04-13 18:46 my_mfc\my_mfc\Debug\
文件 658557 2014-04-13 14:35 my_mfc\my_mfc\Debug\AddImageDlg.obj
文件 132076 2014-04-13 14:35 my_mfc\my_mfc\Debug\CL.read.1.tlog
文件 1830 2014-04-13 14:35 my_mfc\my_mfc\Debug\CL.write.1.tlog
文件 146090 2014-04-13 14:35 my_mfc\my_mfc\Debug\CvvImage.obj
文件 3302 2014-04-13 14:35 my_mfc\my_mfc\Debug\cl.command.1.tlog
文件 2 2014-04-13 18:46 my_mfc\my_mfc\Debug\li
文件 2 2014-04-13 18:46 my_mfc\my_mfc\Debug\li
文件 2506 2014-04-13 18:46 my_mfc\my_mfc\Debug\li
文件 7694 2014-04-13 18:46 my_mfc\my_mfc\Debug\li
文件 1086 2014-04-13 18:46 my_mfc\my_mfc\Debug\li
文件 694 2014-04-13 18:46 my_mfc\my_mfc\Debug\mt.command.1.tlog
文件 604 2014-04-13 18:46 my_mfc\my_mfc\Debug\mt.read.1.tlog
文件 434 2014-04-13 18:46 my_mfc\my_mfc\Debug\mt.write.1.tlog
文件 667 2014-04-13 18:46 my_mfc\my_mfc\Debug\my_mfc.exe.em
文件 732 2014-04-13 18:46 my_mfc\my_mfc\Debug\my_mfc.exe.em
文件 381 2014-04-13 18:46 my_mfc\my_mfc\Debug\my_mfc.exe.intermediate.manifest
文件 49 2014-04-13 18:46 my_mfc\my_mfc\Debug\my_mfc.lastbuildstate
文件 3296 2014-04-13 18:46 my_mfc\my_mfc\Debug\my_mfc.log
文件 154339 2014-04-13 14:35 my_mfc\my_mfc\Debug\my_mfc.obj
文件 33619968 2014-04-13 14:35 my_mfc\my_mfc\Debug\my_mfc.pch
............此处省略33个文件信息
相关资源
- ffmpeg for MFC 1.2 源代码
- windows下的ffmpeg、MFC制作的播放器
- 基于VC++利用MFC做的图书管理系统
- MFC智能停车场管理系统
- VC++用MFC做选课系统
- MFC VC++实现Sierpinski分形图像
- MFC基于对话框的气体浓度检测系统
- 功能强大的多条曲线绘制类 (MFC,
- MFC_带进度条的状态栏
- 用C++写的FTP客户端
- c++编写的十字路口交通灯程序
- 禁忌搜索算法30城市TSP问题C++源代码
- MFC多人聊天室
- MFC深入浅出带目录完整版
- C++实现AES、DES加密算法含MFC界面
- MFC写的一个汉字取模软件
- MFC Tab control 重绘便签边框和主框 背景
- High-speed Charting ControlMFC绘图控件
- VC6.0MFC界面美化
- 基于MFC的无线串口调试工具-哈工大威
- 24点应用游戏MFC版
- 页面置换算法用MFC实现了
- win7风格的mfc界面美化源代码
- MFC 绘制指针式钟表
- BCGControlBar Professional v.28 Full Source
- MFC游戏编程几款经典小游戏的详细代
- 网络调试助手C++源码(VS 2008开发)
- MFC 官方API文档 MSDN原版
- MFC多文档应用程序同时显示两个视图
- C++MFC数据库职工信息管理系统,实现
评论
共有 条评论