机器视觉---定位识别源码
(完全基于几何算法的定位, 精度高、速度快、识别能力及抗干扰能力强;
引用地址: 注册会员下载VB,VC实现源码, 其中对图片的处理代码)
// KMDVisionDemoDlg.cpp : implementation file
//
#include "stdafx.h"
#include "KMDVisionDemo.h"
#include "KMDVisionDemoDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CKMDVisionDemoDlg dialog
CKMDVisionDemoDlg::CKMDVisionDemoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CKMDVisionDemoDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CKMDVisionDemoDlg)
m_Score = 0;
m_DownZoom = 1.0f;
m_UpZoom = 1.0f;
m_MaxAngle = 45;
m_MinAngle = -45;
m_PyrLevel = 1;
m_MatchNum = 1;
m_pRawData = NULL;
m_pDispData = NULL;
m_hMVC1000=NULL;
IsMatching=FALSE;
IsCamera=FALSE;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CKMDVisionDemoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CKMDVisionDemoDlg)
DDX_Control(pDX, IDC_VIEWWND, m_ViewWnd);
DDX_Control(pDX, IDC_SCROLLBARV, m_VScroBar);
DDX_Control(pDX, IDC_SCROLLBARH, m_HScroBar);
DDX_Text(pDX, IDC_MATCHNUM, m_MatchNum);
DDV_MinMaxInt(pDX, m_MatchNum, 1, 80);
DDX_Text(pDX, IDC_ZOOMBEDIT, m_UpZoom);
DDV_MinMaxFloat(pDX, m_UpZoom, 1.f, 5.f);
DDX_Text(pDX, IDC_ZOOMSEDIT, m_DownZoom);
DDV_MinMaxFloat(pDX, m_DownZoom, 0.1f, 1.f);
DDX_Text(pDX, IDC_SCORE, m_Score);
DDV_MinMaxInt(pDX, m_Score, 20, 100);
DDX_Text(pDX, IDC_PYRLEVEL, m_PyrLevel);
DDV_MinMaxInt(pDX, m_PyrLevel, 1, 4);
DDX_Text(pDX, IDC_MAXANGLEEDIT, m_MaxAngle);
DDV_MinMaxInt(pDX, m_MaxAngle, -180, 180);
DDX_Text(pDX, IDC_MINANGLEEDIT, m_MinAngle);
DDV_MinMaxInt(pDX, m_MinAngle, -180, 180);
//}}AFX_DATA_MAP
}
void CALLBACK RawCallBack(LPVOID lpParam, LPVOID lpUser)
{
BYTE *pDataBuffer = (BYTE*)lpParam;
CKMDVisionDemoDlg *pDemoDlg = (CKMDVisionDemoDlg*)lpUser;
for(int i=0;i<480;i++)
memcpy(pDemoDlg->m_pDispData+i*640,pDataBuffer+(479-i)*640,640);
pDemoDlg->DrawImage();
}
BEGIN_MESSAGE_MAP(CKMDVisionDemoDlg, CDialog)
//{{AFX_MSG_MAP(CKMDVisionDemoDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_SETMODELAREA, OnSetmodelarea)
ON_BN_CLICKED(IDC_OPENMODELIMAGE, OnOpenmodelimage)
ON_BN_CLICKED(IDC_MAKEMODEL, OnMakemodel)
ON_BN_CLICKED(IDC_OPENSEARCHIMAGE, OnOpensearchimage)
ON_BN_CLICKED(IDC_SETSEARCHAREA, OnSetsearcharea)
ON_BN_CLICKED(IDC_TRYMODEL, OnTrymodel)
ON_WM_HSCROLL() ON_WM_VSCROLL()
ON_WM_LBUTTONDOWN()
ON_BN_CLICKED(IDC_OPENMODEL, OnOpenmodel)
ON_EN_CHANGE(IDC_SCORE, OnChangeScore)
ON_EN_CHANGE(IDC_ZOOMSEDIT, OnChangeZoomsedit)
ON_EN_CHANGE(IDC_ZOOMBEDIT, OnChangeZoombedit)
ON_EN_CHANGE(IDC_PYRLEVEL, OnChangePyrlevel)
ON_BN_CLICKED(IDC_SAVEMODEL, OnSavemodel)
ON_EN_CHANGE(IDC_MATCHNUM, OnChangeMatchnum)
ON_BN_CLICKED(IDC_OPENCAMERA, OnOpencamera)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_OPENMODELIMAGE2, OnOpenmodelimage2)
ON_BN_CLICKED(IDC_DISPLAYREAL, OnDisplayreal)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CKMDVisionDemoDlg message handlers
BOOL CKMDVisionDemoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog