⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 searchobjectdlg.cpp

📁 机器人视觉处理程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// SearchObjectDlg.cpp : implementation file
//

#include "stdafx.h"
#include "IRExpPlatform.h"
#include "SearchObjectDlg.h"
#include  "VideoConfigureDlg.h"
#include  "ThresholdSet.h"
#include "ParameterSet.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSearchObjectDlg dialog


CSearchObjectDlg::CSearchObjectDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSearchObjectDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSearchObjectDlg)
	m_strPos = _T("");
	//}}AFX_DATA_INIT
}


void CSearchObjectDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSearchObjectDlg)
	DDX_Control(pDX, IDC_COMBOOBSTACLE, m_ctrlComboObstacleColor);
	DDX_Control(pDX, IDC_COMBOOBJECT, m_ctrlComboObjectColor);
	DDX_Text(pDX, IDC_EDITROBOTPOS, m_strPos);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSearchObjectDlg, CDialog)
	//{{AFX_MSG_MAP(CSearchObjectDlg)
	ON_WM_MOUSEMOVE()
	ON_BN_CLICKED(IDC_CLOSEINSEARCHDLG, OnCloseinsearchdlg)
//	ON_BN_CLICKED(IDC_BACKINSEARCHDLG, OnBackinsearchdlg)
	ON_BN_CLICKED(IDC_STARTINSEARCHOBJECT, OnStartinsearchobject)
	ON_BN_CLICKED(IDC_CONFIGVIDEOINSEARCHDLG, OnConfigvideoinsearchdlg)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_CARSTOPINSEARCHOBJECT, OnCarstopinsearchobject)
	ON_CBN_CLOSEUP(IDC_COMBOOBJECT, OnCloseupComboobject)
	ON_CBN_CLOSEUP(IDC_COMBOOBSTACLE, OnCloseupComboobstacle)
	ON_BN_CLICKED(IDC_OPENCOLORVIDEO, OnOpencolorvideo)
	ON_BN_CLICKED(IDC_CLOSECOLORVIDEO, OnClosecolorvideo)
	ON_WM_PAINT()
	ON_BN_CLICKED(IDC_THRESHOLDSETINSEARCHOBJECTDLG, OnThresholdsetinsearchobjectdlg)
	ON_BN_CLICKED(IDC_PARAMETERSETINSEARCHOBJECTDLG, OnParametersetinsearchobjectdlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSearchObjectDlg message handlers


void CSearchObjectDlg::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	//注释请参考void CWalkWhiteDlg::OnLButtonDown(UINT nFlags, CPoint point) 
	CWnd* pWnd= GetDlgItem(IDC_AFTERDEALINSEARCHDLG);
	CDC* pDC = pWnd->GetDC();
	CPoint selectPoint;

	selectPoint.x = point.x;
	selectPoint.y = point.y;

    MapWindowPoints(pWnd, &selectPoint, 1);
	ClientToScreen(&point);

	CRect imageRect;
	pWnd->GetWindowRect(&imageRect);

	if(imageRect.PtInRect(point))
		m_strPos.Format("%d,%d", selectPoint.x, selectPoint.y);
	else
		m_strPos.Format("%d,%d", 0, 0);		

	UpdateData(FALSE);
	ReleaseDC(pDC);
	
	CDialog::OnMouseMove(nFlags, point);
}

//按下"关闭"按钮执行的处理函数
void CSearchObjectDlg::OnCloseinsearchdlg() 
{
	// TODO: Add your control notification handler code here

		if(bFlagTimerKilled ==FALSE)						//若定时器没有被关闭则关闭它
			KillTimer(m_nTimerInSearchobjectDlg);

		capDriverDisconnect(m_hCaptureInSearchObjectDlg );	//断开视频连接

		StopCar();											//停止机器人运行
		
		CDialog::OnCancel();								//关闭本对话框

	
}

BOOL CSearchObjectDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();	
	// TODO: Add extra initialization here
//    flags=1;
	theApp.bFirstFilter = TRUE;				//第一次中值滤波

	theApp.colObject = RED;					//默认目标物为红色
	theApp.colObstacle = BLUE;				//默认障碍物为蓝色
	m_SelObjectColor = "红色";
	m_SelObstacleColor = "蓝色";

	m_ctrlComboObjectColor.SetCurSel(0);	//目标物初始化为红色
    m_ctrlComboObstacleColor.SetCurSel(0);	//障碍物初始化为蓝色

	bFlagTimerKilled = FALSE;  				//定时器未关闭

	theApp.bLeftEdge = FALSE;				//机器人未遇到左列边缘
	theApp.bRightEdge = FALSE;				//机器人未遇到右列边缘

	//按钮使能控制
	GetDlgItem(IDC_OPENCOLORVIDEO) -> EnableWindow(TRUE);
	GetDlgItem(IDC_CLOSECOLORVIDEO) -> EnableWindow(FALSE);
	GetDlgItem(IDC_STARTINSEARCHOBJECT) -> EnableWindow(FALSE);
	GetDlgItem(IDC_CARSTOPINSEARCHOBJECT) -> EnableWindow(FALSE);
	GetDlgItem(IDC_CONFIGVIDEOINSEARCHDLG) -> EnableWindow(FALSE);
	GetDlgItem(IDC_THRESHOLDSETINSEARCHOBJECTDLG) -> EnableWindow(FALSE);
	GetDlgItem(IDC_PARAMETERSETINSEARCHOBJECTDLG) -> EnableWindow(FALSE);
	

	for(int i=0; i<WIDTH*HEIGHT*3; i++)
		theApp.tempColor[i]= 255;			//初始化
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
/*
//按下"返回"按钮执行的处理函数
void CSearchObjectDlg::OnBackinsearchdlg() 
{
	// TODO: Add your control notification handler code here
	if(bFlagTimerKilled ==FALSE)						//若定时器没有被关闭则关闭它
		KillTimer(m_nTimerInSearchobjectDlg);

	capDriverDisconnect(m_hCaptureInSearchObjectDlg );	//断开视频连接
	StopCar();											//停止机器人运行	
	CDialog::OnCancel();								//关闭本对话框

//  AfxGetMainWnd()->ShowWindow(SW_SHOW);				//显示主对话框
	
}
*/

//按下"启动机器人"按钮执行的处理函数
void CSearchObjectDlg::OnStartinsearchobject() 
{
	// TODO: Add your control notification handler code here
	GetDlgItem(IDC_CARSTOPINSEARCHOBJECT) -> EnableWindow(TRUE);

	//目标物颜色和障碍物颜色不能相同
	if(m_SelObjectColor == m_SelObstacleColor)
	{
		AfxMessageBox("目标物颜色和障碍物颜色不能相同!",MB_OK);
		return;
	}
	else
	{
		if(m_SelObjectColor=="红色")
			theApp.colObject=RED;				//目标物为红色
		else
			if(m_SelObjectColor=="蓝色")
			    theApp.colObject=BLUE;			//目标物为蓝色
		if(m_SelObstacleColor=="红色")
			theApp.colObstacle=RED;				//障碍物为红色
		else
			if(m_SelObstacleColor=="蓝色")
			    theApp.colObstacle=BLUE;		//障碍物为蓝色
	}

	m_nTimerInSearchobjectDlg=SetTimer(3,11,NULL); //启动定时器	

}

//按下"视频配置"按钮执行的处理函数
void CSearchObjectDlg::OnConfigvideoinsearchdlg() 
{
	// TODO: Add your control notification handler code here
	CVideoConfigureDlg dlgInSearchObject;         //启动视频配置对话框
	dlgInSearchObject.DoModal();
	
}

void CSearchObjectDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default

/*

	theApp.bFirstFilter = TRUE;
	MedianFilter();
	theApp.bFirstFilter = FALSE;
	MedianFilter();
	GrayScale();  //灰度化
	SobelEdgeDection();
//	Skeleton();
	DisplayGrayFrames();  //显示灰度图像
*/




	
	theApp.bFirstFilter = TRUE;				//先对原始图象进行中值滤波
	MedianFilter();							//第一次中值滤波
	ColorSegment();							//阈值分割	
	theApp.bFirstFilter = FALSE;			//再对阈值分割后的图像进行中值滤波
	MedianFilter();							//再一次中值滤波

	DecisionSearchObject();					//寻找目标物决策函数

	if(theApp.bFlagObject == TRUE)					//发现目标物
		if(SearchObjectSucess()==TRUE)				//成功找到目标物
		{
			KillTimer(m_nTimerInSearchobjectDlg);	//关闭定时器
			bFlagTimerKilled =TRUE;                 //定时器已经被关闭

			AfxMessageBox("机器人已经成功找到目标物!",MB_OK);
			MessageBeep(0xFFFFFFFF);				// Beep
		}
		else
			bFlagTimerKilled =FALSE;


		
/*

	if(theApp.bFlagObstacle == TRUE)				//发现障碍物
	{
			KillTimer(m_nTimerInSearchobjectDlg);
			AfxMessageBox("机器人成功检测到障碍物!",MB_OK);
			MessageBeep(0xFFFFFFFF);  // Beep
	}	
	if(theApp.bFlagEdge == TRUE)					//发现边缘
	{
			KillTimer(m_nTimerInSearchobjectDlg);
			AfxMessageBox("机器人成功检测到边缘!",MB_OK);
			MessageBeep(0xFFFFFFFF);  // Beep
	}*/

	
	DisplayFrames();								//显示视频
	
	
	CDialog::OnTimer(nIDEvent);
}


//按下"停止机器人"按钮执行的处理函数
void CSearchObjectDlg::OnCarstopinsearchobject() 
{
	// TODO: Add your control notification handler code here
	GetDlgItem(IDC_CARSTOPINSEARCHOBJECT) -> EnableWindow(FALSE);
	StopCar();									//停止机器人
	if(bFlagTimerKilled ==FALSE)				//若定时器没有被关闭
		KillTimer(m_nTimerInSearchobjectDlg);	//关闭定时器	
	
}
//目标物颜色组合框关闭后执行的处理函数
void CSearchObjectDlg::OnCloseupComboobject() 
{
	// TODO: Add your control notification handler code here

	int nSelection;
	if((nSelection=m_ctrlComboObjectColor.GetCurSel())!=CB_ERR)    //注意运算的优先顺序
	{
		m_ctrlComboObjectColor.GetLBText(nSelection,m_SelObjectColor);
		UpdateData(FALSE);
/*
		if(m_SelObjectColor=="红色")
			theApp.colObject=RED;						//目标物为红色
		else
			if(m_SelObjectColor=="蓝色")
			    theApp.colObject=BLUE;					//目标物为蓝色
		
		CWnd* pColorWnd = GetDlgItem(IDC_OBJECTCOLOR);
		CDC* pColorDC = pColorWnd->GetDC();

		CRect rect;
		pColorWnd->GetClientRect(&rect);
	
		CBrush newbrh(theApp.colObject);
		CBrush *pOldBrush;
		pOldBrush=pColorDC->SelectObject(&newbrh);

		pColorDC->Rectangle(&rect);
		pColorDC->SelectObject(pOldBrush);	 
		ReleaseDC(pColorDC);
*/
		CWnd* pColorWnd = GetDlgItem(IDC_COMBOOBJECT);
		CRect rect;
		pColorWnd->GetClientRect(&rect);
		pColorWnd->InvalidateRect(&rect,FALSE);
		objectColor();
	}
	
}

//障碍物颜色组合框关闭后执行的处理函数
void CSearchObjectDlg::OnCloseupComboobstacle() 
{
	// TODO: Add your control notification handler code here
	int nSelection;
	if((nSelection=m_ctrlComboObstacleColor.GetCurSel())!=CB_ERR)    //注意运算的优先顺序
	{
		m_ctrlComboObstacleColor.GetLBText(nSelection,m_SelObstacleColor);
/*
		if(m_SelObstacleColor=="红色")
			theApp.colObstacle=RED;								//障碍物为红色
		else
			if(m_SelObstacleColor=="蓝色")
			    theApp.colObstacle=BLUE;						//障碍物为蓝色

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -