#include "stdafx.h" #include "LaiPuLaser.h" #include "DlgDnCutCamera.h" #include "afxdialogex.h" #include "MsgBox.h" #include "AuthorityMgr.h" #include "FileMgr.h" #include "LogMgr.h" #include "CommonFlowMgr.h" #include "CameraHawkvis.h" #include "ProgramCutMgr.h" #include "SmartArchive.h" #include #include #include #include using namespace cv; DlgHawkvisCamera *gDlgHawkvisCamera; IMPLEMENT_DYNAMIC(DlgHawkvisCamera, CDialogEx) BEGIN_MESSAGE_MAP(DlgHawkvisCamera, CDialogEx) ON_WM_TIMER() ON_BN_CLICKED(IDC_OPEN_CAM, &DlgHawkvisCamera::OnBnClickedOpenCam) ON_BN_CLICKED(IDC_FRAME_ONE, &DlgHawkvisCamera::OnBnClickedFrameOne) ON_BN_CLICKED(IDC_FRAME_CONTINUE, &DlgHawkvisCamera::OnBnClickedFrameContinue) ON_BN_CLICKED(IDC_READ_BMP, &DlgHawkvisCamera::OnBnClickedReadBmp) ON_BN_CLICKED(IDC_SAVE_BMP, &DlgHawkvisCamera::OnBnClickedSaveBmp) ON_BN_CLICKED(IDC_CREAT_CATCH_TEMP, &DlgHawkvisCamera::OnBnClickedCreatCatchTemp) ON_BN_CLICKED(IDC_SET_EXPORE, &DlgHawkvisCamera::OnBnClickedSetExpore) ON_BN_CLICKED(IDC_ZOOM_FULL, &DlgHawkvisCamera::OnBnClickedZoomFull) ON_BN_CLICKED(IDC_HK_ZOOM_IN, &DlgHawkvisCamera::OnBnClickedHkZoomIn) ON_BN_CLICKED(IDC_HK_ZOOM_OUT, &DlgHawkvisCamera::OnBnClickedHkZoomOut) ON_BN_CLICKED(IDC_CLOSE_CAM, &DlgHawkvisCamera::OnBnClickedCloseCam) ON_BN_CLICKED(IDC_TEST_CATCH_TEMP, &DlgHawkvisCamera::OnBnClickedTestCatchTemp) ON_BN_CLICKED(IDC_LOAD_CATCH_TEMP, &DlgHawkvisCamera::OnBnClickedLoadCatchTemp) ON_BN_CLICKED(IDC_SAVE_CATCH_TEMP, &DlgHawkvisCamera::OnBnClickedSaveCatchTemp) ON_BN_CLICKED(IDC_RADIO3, &DlgHawkvisCamera::OnBnClickedToCam1) ON_BN_CLICKED(IDC_RADIO1, &DlgHawkvisCamera::OnBnClickedToCam2) ON_BN_CLICKED(IDC_TEST_CATCH_TEMP2, &DlgHawkvisCamera::OnBnClickedTestDefinition) ON_MESSAGE(WM_UPDATE_FALSE, OnUpdateFalse) //ON_MESSAGE_VOID(WM_UPDATE_FALSE, OnUpdateFalse) ON_BN_CLICKED(IDC_TEST_CATCH_TEMP3, &DlgHawkvisCamera::OnBnClickedSetThreshold) END_MESSAGE_MAP() #define WORK_TIMER1 1 #define WORK_TIME_DELAY1 50 DlgHawkvisCamera::DlgHawkvisCamera(CWnd* pParent /*=NULL*/) : m_CurPic_Definition(0) , m_CurTrackThreshold(0) { m_nExpore = (60000); } DlgHawkvisCamera::~DlgHawkvisCamera() { } void DlgHawkvisCamera::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_ISP3000_LOGO_BTN, m_ISP3000LogoBtn); DDX_Control(pDX, IDC_HAWKVISCTRLCTRL3, m_HawkvisCtrl); DDX_Control(pDX, IDC_OPEN_CAM, m_OpenCamBtn); DDX_Control(pDX, IDC_CLOSE_CAM, m_CloseCamBtn); DDX_Control(pDX, IDC_FRAME_ONE, m_OneFrameBtn); DDX_Control(pDX, IDC_FRAME_CONTINUE, m_ContinueFrameBtn); DDX_Control(pDX, IDC_READ_BMP, m_ReadBmpBtn); DDX_Control(pDX, IDC_SAVE_BMP, m_SaveBmpBtn); DDX_Control(pDX, IDC_SET_EXPORE, m_SetExpBtn); DDX_Control(pDX, IDC_HK_ZOOM_IN, m_ZoomInBtn); DDX_Control(pDX, IDC_HK_ZOOM_OUT, m_ZoomOutBtn); DDX_Control(pDX, IDC_ZOOM_FULL, m_ZoomFullBtn); DDX_Control(pDX, IDC_LOAD_CATCH_TEMP, m_ReadTempBtn); DDX_Control(pDX, IDC_CREAT_CATCH_TEMP, m_EditTempBtn); DDX_Control(pDX, IDC_TEST_CATCH_TEMP, m_TestTempBtn); DDX_Control(pDX, IDC_SAVE_CATCH_TEMP, m_SaveTempBtn); DDX_Text(pDX, IDC_EDIT_SET_EXP, m_nExpore); DDX_Control(pDX, IDC_TEST_CATCH_TEMP2, m_TestDefinitionBtn); DDX_Control(pDX, IDC_TEST_CATCH_TEMP3, m_SetThresholdBtn); DDX_Text(pDX, IDC_EDIT_SET_EXP2, m_CurTrackThreshold ); DDX_Text(pDX, IDC_STATIC_CurValue, m_CurPic_Definition); } BOOL DlgHawkvisCamera::OnInitDialog() { gDlgHawkvisCamera = this; CDialogEx::OnInitDialog(); m_ISP3000LogoBtn.SetUpColor(RGB_YELLOW); m_OpenCamBtn.SetUpColor(RGB_GREEN); m_CloseCamBtn.SetUpColor(RGB_GREEN); m_ReadTempBtn.SetUpColor(RGB_GREEN1); m_EditTempBtn.SetUpColor(RGB_GREEN1); m_TestTempBtn.SetUpColor(RGB_GREEN1); m_SaveTempBtn.SetUpColor(RGB_GREEN1); m_OneFrameBtn.SetUpColor(RGB_PINK); m_ContinueFrameBtn.SetUpColor(RGB_PINK); Update(); ((CButton*)GetDlgItem(IDC_CROSS_CHECK))->SetCheck(TRUE); UpdateData(FALSE); return TRUE; } //观察平台坐标的变化 void DlgHawkvisCamera::UpdateInfo() { /*//换文件时,自动换模板 if (gCameraHawkvis->GetCurShapeModelID()!= m_ShapeModelID) { m_ShapeModelID = gCameraHawkvis->GetCurShapeModelID(); OnBnClickedLoadCatchTemp(); }*/ if (m_DlgCurCamIndex == gCameraHawkvis->GetCamIndex()) return; if (gCameraHawkvis->GetCamIndex() == 0) OnBnClickedToCam1(); if (gCameraHawkvis->GetCamIndex() == 1) OnBnClickedToCam2(); UpdateData(FALSE); } void DlgHawkvisCamera::Update() { SetTimer(WORK_TIMER1,WORK_TIME_DELAY1,NULL);//用timer来更新,否则会报错 } void DlgHawkvisCamera::OnTimer(UINT nIDEvent) { if(nIDEvent == WORK_TIMER1) { UpdateInfo(); //KillTimer(WORK_TIMER1); } CDialog::OnTimer(nIDEvent); } #if 1 void DlgHawkvisCamera::OnBnClickedOpenCam() { #ifdef __HAWKVIS_MINDVISION_CCD__ if(m_HawkvisCtrl.MV_OpenCamera()) #else if(m_HawkvisCtrl.HV_OpenCamera()) #endif { gLogMgr->WriteDebugLog("Hawkvis : Open Cam ---->OK"); } else gLogMgr->WriteDebugLog("Hawkvis : Open Cam ---->ERR"); } void DlgHawkvisCamera::OnBnClickedCloseCam() { #ifdef __HAWKVIS_MINDVISION_CCD__ m_HawkvisCtrl.MV_CloseCamera(); #else m_HawkvisCtrl.HV_CloseCamera(); #endif gLogMgr->WriteDebugLog("Hawkvis : Close Cam"); } void DlgHawkvisCamera::OnBnClickedFrameOne() { m_HawkvisCtrl.SetCrossShow(1,30,30,-1,-1,FALSE); #ifdef __HAWKVIS_MINDVISION_CCD__ if(m_HawkvisCtrl.MV_GetOneFrame()) #else if(m_HawkvisCtrl.HV_GetOneFrame()) #endif { //m_HawkvisCtrl.Rotate180(); m_HawkvisCtrl.ZoomFitWindow(); gLogMgr->WriteDebugLog("Hawkvis : FrameOne --OK"); } else { gLogMgr->WriteDebugLog("Hawkvis : FrameOne --ERR"); } } void DlgHawkvisCamera::OnBnClickedFrameContinue() { m_HawkvisCtrl.SetCrossShow(1,30,30,-1,-1,((CButton*)GetDlgItem(IDC_CROSS_CHECK))->GetCheck()); #ifdef __HAWKVIS_MINDVISION_CCD__ if(m_HawkvisCtrl.MV_GetContinueFrame()) #else if(m_HawkvisCtrl.HV_GetContinueFrame()) #endif { m_HawkvisCtrl.ZoomFitWindow(); gLogMgr->WriteDebugLog("Hawkvis : FrameContinue --OK"); } else { gLogMgr->WriteDebugLog("Hawkvis : FrameContinue --ERR"); } } void DlgHawkvisCamera::OnBnClickedReadBmp() { m_HawkvisCtrl.ReadImage(); } void DlgHawkvisCamera::OnBnClickedSaveBmp() { CFileMgr FileMgr; CString path = FileMgr.GetWorkPath(); m_HawkvisCtrl.WriteImage((LPCTSTR)path,"OutputImg"); gLogMgr->WriteDebugLog("Hawkvis : SaveBmp"); } //设置曝光值 void DlgHawkvisCamera::OnBnClickedSetExpore() { UpdateData(TRUE); #ifdef __HAWKVIS_MINDVISION_CCD__ if (m_DlgCurCamIndex==0) { gCameraHawkvis->m_nCam1Expore = m_nExpore; } else { gCameraHawkvis->m_nCam2Expore = m_nExpore; } m_HawkvisCtrl.MV_SetCameraExpTime(m_nExpore); #else m_HawkvisCtrl.HV_SetCameraExpTime(m_nExpore); #endif gLogMgr->WriteDebugLog("Hawkvis : SetExpore"); OnBnClickedFrameOne(); } #endif void DlgHawkvisCamera::OnBnClickedZoomFull() { m_HawkvisCtrl.ZoomFitWindow(); } void DlgHawkvisCamera::OnBnClickedHkZoomIn() { m_HawkvisCtrl.ZoomIn(); } void DlgHawkvisCamera::OnBnClickedHkZoomOut() { m_HawkvisCtrl.ZoomOut(); } #if 1 //编辑模板 void DlgHawkvisCamera::OnBnClickedCreatCatchTemp() { //调用控件接口,创建基于形状的模板,输入参数为模板ID号。控件最多支持创建100个模板,即模板号为0~99 m_HawkvisCtrl.CreateShapeModel(0); //m_HawkvisCtrl.CreateShapeModel(gCameraHawkvis->GetCurShapeModelID()); } void DlgHawkvisCamera::OnBnClickedTestCatchTemp() { //清除之前绘制的圆 m_HawkvisCtrl.ClearGraphicObject(); //抓取一帧 #ifdef __HAWKVIS_MINDVISION_CCD__ if (!m_HawkvisCtrl.MV_GetOneFrame()) #else if (!m_HawkvisCtrl->HV_GetOneFrame()) #endif { CString str = _T("func : Hawkvis Get One Frame----->Error"); //CExceptionMsg Msg; //Msg.SetMsg(str); //throw Msg; gLogMgr->WriteDebugLog(str); } Sleep(300);//等待数据结果输出到ocx 控件上 //模板查找 double pdbX[10], pdbY[10], pdbAngles[10], pdbScale[10], pdbSore[10]; long nCount[1] = { 1 }; //FindShapeMode 控件的模板查找函数。 //第一个参数,金字塔层数,取值范围1~5 //第二个参数,输出查找到的目标列坐标 //第三个参数,输出查找到的目标行坐标 //第四个参数,输出查找到的目标角度 //第五个参数,输出查找到的目标伸缩度 //第六个参数,输出查找到的目标分数 //第七个参数,输出查找到的目标个数 //第八个参数,输入查找模板的ID号 VARIANT *v_pdbX = new VARIANT[1]; VARIANT *v_pdbY = new VARIANT[1]; VARIANT *v_pdbAngles = new VARIANT[1]; VARIANT *v_pdbScale = new VARIANT[1]; VARIANT *v_pdbSore = new VARIANT[1]; bool ret = m_HawkvisCtrl.FindShapeModel(gCameraHawkvis->GetCurShapeModelID(), v_pdbY, v_pdbX, v_pdbAngles, v_pdbScale, v_pdbSore, nCount); if (!ret)//2018-01-15 增加保护,否则下面可能会报错 { CString str = _T("func : Hawkvis Find Shape Model----->Error"); //CExceptionMsg Msg; //Msg.SetMsg(str); //throw Msg; gLogMgr->WriteDebugLog(str); return; } //pdbX for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbX->parray); ++index) { ::SafeArrayGetElement(v_pdbX->parray, &index, pdbX + index); } //pdbY for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbY->parray); ++index) { ::SafeArrayGetElement(v_pdbY->parray, &index, pdbY + index); } //pdbAngles for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbAngles->parray); ++index) { ::SafeArrayGetElement(v_pdbAngles->parray, &index, pdbAngles + index); } //pdbScale for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbScale->parray); ++index) { ::SafeArrayGetElement(v_pdbScale->parray, &index, pdbScale + index); } //pdbSore for (long index = 0; index < ::SafeArrayGetElemsize(v_pdbSore->parray); ++index) { ::SafeArrayGetElement(v_pdbSore->parray, &index, pdbSore + index); } //显示查找到的模板的位置 #if 1 Dbxy pt; CString str; str.Format("X: %0.3f, Y:%0.f", pdbX[0], pdbY[0]); pt.x = pdbX[0]; pt.y = pdbY[0]; str.Format("X: %0.3f, Y:%0.3f", pt.x, pt.y); gLogMgr->WriteDebugLog(str); #endif //gCommonFlowMgr->CameraCatch(); } void DlgHawkvisCamera::OnBnClickedLoadCatchTemp() { CFileMgr FileMgr; CString path = FileMgr.GetWorkPath(); // auto b=m_HawkvisCtrl.LoadShapeModel((LPCTSTR)path); auto b = m_HawkvisCtrl.LoadShapeModelByID(gCameraHawkvis->GetCurShapeModelID(), (LPCTSTR)path); CString str; str.Format("Hawkvis : LoadatchTemp [%d]", gCameraHawkvis->GetCurShapeModelID()); if (b) str += " 成功!"; else str += " 失败!"; gLogMgr->WriteDebugLog(str); //gLogMgr->WriteDebugLog("Hawkvis : LoadCatchTemp"); } void DlgHawkvisCamera::OnBnClickedSaveCatchTemp() { //SaveShapeMode 保存模板函数 //第一个参数,模板保存的路径 //第二个参数,模板保存的路径名长度 CFileMgr FileMgr; CString path = FileMgr.GetWorkPath(); //auto b= m_HawkvisCtrl.SaveShapeModel((LPCTSTR)path); auto b = m_HawkvisCtrl.SaveShapeModelByID(gCameraHawkvis->GetCurShapeModelID(),(LPCTSTR)path); CString str; str.Format("Hawkvis : SaveCatchTemp [%d]", gCameraHawkvis->GetCurShapeModelID()); if (b) str += " 成功!"; else str += " 失败!"; gLogMgr->WriteDebugLog(str); } #endif void DlgHawkvisCamera::OnBnClickedToCam1() { //提前刷新索引,避免重复进入 m_DlgCurCamIndex = 0; gCameraHawkvis->SetCamIndex(0); m_HawkvisCtrl.MV_CloseCamera(); if (m_HawkvisCtrl.MV_SelectAdapterByIdx(0)) { if (m_HawkvisCtrl.MV_OpenCamera()) { OnBnClickedLoadCatchTemp();//读取模板 m_HawkvisCtrl.MV_SetCameraExpTime(gCameraHawkvis->m_nCam1Expore); m_nExpore = gCameraHawkvis->m_nCam1Expore; //UpdateData(FALSE); //OnBnClickedSetExpore();//设置曝光 } m_HawkvisCtrl.SetCrossShow(1, 30, 30, -1, -1, ((CButton*)GetDlgItem(IDC_CROSS_CHECK))->GetCheck()); if (m_HawkvisCtrl.MV_GetOneFrame()) { m_HawkvisCtrl.ZoomFitWindow(); } /*else { static bool bfirst = true; if (bfirst) { AfxMessageBox("相机1连续采集失败!");//报错一次 bfirst = false; } }*/ } else { static bool bfirst = true; if (bfirst) { bfirst = false; AfxMessageBox("打开相机1失败!");//报错一次 } } ((CButton*)GetDlgItem(IDC_RADIO3))->SetCheck(TRUE); ((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE); gLogMgr->WriteDebugLog("Switch To Cam1"); } void DlgHawkvisCamera::OnBnClickedToCam2() { //提前刷新索引,避免重复进入 m_DlgCurCamIndex = 1; gCameraHawkvis->SetCamIndex(1); m_HawkvisCtrl.MV_CloseCamera(); if (m_HawkvisCtrl.MV_SelectAdapterByIdx(1)) { if (m_HawkvisCtrl.MV_OpenCamera()) { OnBnClickedLoadCatchTemp();//读取模板 m_HawkvisCtrl.MV_SetCameraExpTime(gCameraHawkvis->m_nCam2Expore); m_nExpore = gCameraHawkvis->m_nCam2Expore; //UpdateData(FALSE); //OnBnClickedSetExpore();//设置曝光 } m_HawkvisCtrl.SetCrossShow(1, 30, 30, -1, -1, ((CButton*)GetDlgItem(IDC_CROSS_CHECK))->GetCheck()); if (m_HawkvisCtrl.MV_GetOneFrame()) { m_HawkvisCtrl.ZoomFitWindow(); } } else { static bool bfirst = true; if (bfirst) { AfxMessageBox("打开相机2失败!");//报错一次 bfirst = false; } } ((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE); ((CButton*)GetDlgItem(IDC_RADIO3))->SetCheck(FALSE); gLogMgr->WriteDebugLog("Switch To Cam2"); } void DlgHawkvisCamera::OnBnClickedTestDefinition() { #ifdef __HAWKVIS_MINDVISION_CCD__ if (m_HawkvisCtrl.MV_GetOneFrame()) #else if (m_HawkvisCtrl.HV_GetOneFrame()) #endif { m_HawkvisCtrl.ZoomFitWindow(); gLogMgr->WriteDebugLog("Hawkvis : FrameOne --OK"); } else { gLogMgr->WriteDebugLog("Hawkvis : FrameOne --ERR"); m_CurPic_Definition = 0; PostMessage(WM_UPDATE_FALSE); return; } CFileMgr fg; CString path = fg.GetWorkPath(); m_HawkvisCtrl.WriteImage((LPCTSTR)path, "PicForDefinition"); Sleep(50); path += "\\PicForDefinition.bmp"; Mat imageSource = imread((LPCTSTR)path); /*Mat imageGray; cvtColor(imageSource, imageGray, CV_RGB2GRAY);*/ Mat imageSobel; //Laplacian(imageSource, imageSobel, CV_16U); Sobel(imageSource, imageSobel, CV_16U, 1, 1); m_CurPic_Definition = mean(imageSobel)[0]; PostMessage(WM_UPDATE_FALSE); } bool DlgHawkvisCamera::bCurPicDefinitionOK() { m_CurTrackThreshold = 0; auto FileName = gProgramCutMgr->GetCurOpenFileName(); if (FileName.IsEmpty()) return true; CString nameTail; nameTail.Format("_T%d.def", m_DlgCurCamIndex); CSmartArchive ar(FileName + nameTail, false); ar + m_CurTrackThreshold; OnBnClickedTestDefinition(); if (m_CurTrackThreshold>0.1) { if (m_CurPic_Definition < m_CurTrackThreshold) return false; } return true; } void DlgHawkvisCamera::OnBnClickedSetThreshold() { UpdateData(TRUE); auto FileName = gProgramCutMgr->GetCurOpenFileName(); if (FileName.IsEmpty()) return; CString nameTail; nameTail.Format("_T%d.def", m_DlgCurCamIndex); CSmartArchive ar(FileName+ nameTail,true); ar + m_CurTrackThreshold; }