• 大小: 24.87MB
    文件类型: .zip
    金币: 2
    下载: 0 次
    发布日期: 2024-01-30
  • 语言: C/C++
  • 标签: MFC  图像拼接  

资源简介

使用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\link-cvtres.read.1.tlog
     文件           2  2014-04-13 18:46  my_mfc\my_mfc\Debug\link-cvtres.write.1.tlog
     文件        2506  2014-04-13 18:46  my_mfc\my_mfc\Debug\link.command.1.tlog
     文件        7694  2014-04-13 18:46  my_mfc\my_mfc\Debug\link.read.1.tlog
     文件        1086  2014-04-13 18:46  my_mfc\my_mfc\Debug\link.write.1.tlog
     文件         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.embed.manifest
     文件         732  2014-04-13 18:46  my_mfc\my_mfc\Debug\my_mfc.exe.embed.manifest.res
     文件         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个文件信息

评论

共有 条评论