diff --git a/DN_sample/DN_sample.cpp b/DN_sample/DN_sample.cpp index d479690..4a42763 100644 --- a/DN_sample/DN_sample.cpp +++ b/DN_sample/DN_sample.cpp @@ -70,6 +70,9 @@ BOOL CDN_sampleApp::InitInstance() // TODO: Place code here to handle when the dialog is // dismissed with Cancel } + else if (nResponse == -1) { + printf("先安装sdk\n"); + } // Since the dialog has been closed, return FALSE so that we exit the // application, rather than start the application's message pump. diff --git a/DN_sample/DN_sample.rc b/DN_sample/DN_sample.rc index 80e9d54..c09bde9 100644 --- a/DN_sample/DN_sample.rc +++ b/DN_sample/DN_sample.rc @@ -165,16 +165,16 @@ BEGIN DEFPUSHBUTTON "OK",IDOK,178,7,50,16,WS_GROUP END -IDD_DN_SAMPLE_DIALOG DIALOGEX 0, 0, 900, 490 +IDD_DN_SAMPLE_DIALOG DIALOGEX 0, 0, 827, 490 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_APPWINDOW CAPTION "image measure" FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN - CONTROL "",IDC_VIDEO,"{922FB007-DD9A-11D3-BD8D-DAAFCB8D9378}",WS_TABSTOP,842,35,52,45 + CONTROL "",IDC_VIDEO,"{922FB007-DD9A-11D3-BD8D-DAAFCB8D9378}",WS_TABSTOP, 100, 19, 720, 466 //842,35,52,45 LISTBOX IDC_LIST2,5,5,90,480,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - CONTROL "",IDC_TAB1,"SysTabControl32",0x0,100,5,740,480 - PUSHBUTTON "最小化",IDC_BTN_MINIMIZE,845,4,50,12 + CONTROL "",IDC_TAB1,"SysTabControl32",0x0,100,5,720,480 + PUSHBUTTON "最小化",IDC_BTN_MINIMIZE,757,4,50,12 END IDD_FORM2 DIALOGEX 0, 0, 453, 304 diff --git a/DN_sample/DN_sampleDlg.cpp b/DN_sample/DN_sampleDlg.cpp index 2156bf2..5c37ec5 100644 --- a/DN_sample/DN_sampleDlg.cpp +++ b/DN_sample/DN_sampleDlg.cpp @@ -117,6 +117,7 @@ void CDN_sampleDlg::SelectOneImg() { m_tab.SetCurSel(0); m_f1.ShowWindow(SW_SHOW); m_f2.ShowWindow(SW_HIDE); + m_video.ShowWindow(SW_HIDE); m_f2.SetMicroImage(m_ImgVec[index]); if (m_f1.hb != NULL) { @@ -165,24 +166,30 @@ BOOL CDN_sampleDlg::OnInitDialog() m_tab.InsertItem(0, _T("抓拍图片")); m_tab.InsertItem(1, _T("距离测量")); + m_tab.InsertItem(2, _T("实时预览")); //m_f1.SetParent(&m_tab); m_f1.Create(IDD_FORM2, &m_tab); m_f2.Create(IDD_CALIMAGE, &m_tab); + m_video.SetParent(&m_tab); + + RECT rect; m_tab.GetClientRect(&rect); - rect.top += 22;//对坐标做一些微调,这26是选项卡按钮的高度 - rect.left += 2;//这是边框的宽度 + rect.top += 22; //对坐标做一些微调,这26是选项卡按钮的高度 + rect.left += 2; //这是边框的宽度 m_f1.SetWindowPos(NULL, 0, 0, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER); m_f2.SetWindowPos(NULL, 0, 0, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER); + m_f1.MoveWindow(&rect); m_f2.MoveWindow(&rect); m_f1.ShowWindow(SW_SHOW); m_f2.ShowWindow(SW_HIDE); + m_video.ShowWindow(SW_HIDE); + m_f2.SetImgPos(); - CDC* pDC = GetDC(); // 获取设备上下文 TEXTMETRIC tm; // 获取字体的高度 pDC->GetTextMetrics(&tm); @@ -199,7 +206,8 @@ BOOL CDN_sampleDlg::OnInitDialog() Test(); } - if (m_video.GetVideoDeviceCount() == 0) return false; + + if (m_video.GetVideoDeviceCount() == 0) return false; m_video.SetUseVideoFilter(1); m_video.SetConnected(TRUE); @@ -296,12 +304,15 @@ BOOL CDN_sampleDlg::OnInitDialog() //m_green = m_video.GetAWBG(m_device.GetCurSel()); //m_blue = m_video.GetAWBB(m_device.GetCurSel()); + ////设置二值化拍照 + //m_video.put_VideoProcAmp(-106, 0);//treshold + //m_video.put_VideoProcAmp(-107, RGB(0, 0, 0));//color if (!m_video.EnableMicroTouch(true)) { //设置touch enable 启用返回false - AfxMessageBox(_T("EnableMicroTouch 启用"), MB_ICONHAND); + //AfxMessageBox(_T("EnableMicroTouch 启用"), MB_ICONHAND); } else { - AfxMessageBox(_T("EnableMicroTouch 取消"), MB_ICONERROR); + AfxMessageBox(_T("EnableMicroTouch 启用失败"), MB_ICONERROR); } return TRUE; // return TRUE unless you set the focus to a control @@ -309,7 +320,7 @@ BOOL CDN_sampleDlg::OnInitDialog() void CDN_sampleDlg::Test() { - CString path[] = {L"\\DoniImage\\1-1.png" ,L"\\DoniImage\\1111.png",L"\\DoniImage\\1112.png" }; + CString path[] = {L"\\DoniImage\\1-1.png" ,L"\\DoniImage\\1111.png",L"\\DoniImage\\1112.png",L"\\DoniImage\\2222.png" }; for (int i = 0; i < sizeof(path) / sizeof(CString); ++i) { std::string imgpath = CW2A(m_ExePath + path[i]); cv::Mat imgMat = cv::imread(imgpath); @@ -443,16 +454,24 @@ void CDN_sampleDlg::ChangeTab(NMHDR* pNMHDR, LRESULT* pResult) m_f1.ClearImg(); m_f1.ShowWindow(SW_SHOW); m_f2.ShowWindow(SW_HIDE); + m_video.ShowWindow(SW_HIDE); break; case 1: m_f2.ClearImg(); m_f2.ShowWindow(SW_SHOW); m_f1.ShowWindow(SW_HIDE); + m_video.ShowWindow(SW_HIDE); + break; + case 2: + m_f2.ShowWindow(SW_HIDE); + m_f1.ShowWindow(SW_HIDE); + m_video.ShowWindow(SW_SHOW); break; default: m_f1.ClearImg(); m_f1.ShowWindow(SW_SHOW); m_f2.ShowWindow(SW_HIDE); + m_video.ShowWindow(SW_HIDE); break; } @@ -465,13 +484,14 @@ BOOL CDN_sampleDlg::PreTranslateMessage(MSG* pMsg) { if (WM_RBUTTONUP == pMsg->message) { + if (m_listBox.GetCount() == 0) return FALSE; CPoint pt; CRect rtClient; m_listBox.GetClientRect(&rtClient); m_listBox.ClientToScreen(&rtClient); INT iScrollPos = m_listBox.GetScrollPos(SB_VERT); GetCursorPos(&pt); - int nItemHeight = m_nFontHeight; // 假设加上一些额外空间作为边距 + int nItemHeight = m_listBox.GetItemHeight(0); int iSelect = (pt.y - rtClient.top + iScrollPos * nItemHeight) / nItemHeight; if (iSelect < m_listBox.GetCount()) { m_listBox.SetCurSel(iSelect); diff --git a/DN_sample/DN_sampleDlg.cpp.bak b/DN_sample/DN_sampleDlg.cpp.bak new file mode 100644 index 0000000..76ae6dd Binary files /dev/null and b/DN_sample/DN_sampleDlg.cpp.bak differ diff --git a/DN_sample/MicroImage.cpp b/DN_sample/MicroImage.cpp index 68abc27..69f874a 100644 --- a/DN_sample/MicroImage.cpp +++ b/DN_sample/MicroImage.cpp @@ -58,20 +58,20 @@ void MicroImage::CropByBorder(int yBegin, int yEnd, int xBegin, int xEnd) { } void MicroImage::StatisticsBGColor() { - Rect cropRect1(m_width / 2 - 40, m_height / 2 - 40, 80, 80); // 定义感兴趣的区域的矩形框 + Rect cropRect1(m_width / 2 - 40, m_height / 2 - 40, 80, 80); // 中心位置 cropRect1 &= Rect(0, 0, m_width, m_height); // 检查ROI是否在图像范围内 Mat cropMat1 = m_image(cropRect1); - Rect cropRect2(0, m_height / 2 - 25, 50, 50); // 定义感兴趣的区域的矩形框 - cropRect2 &= Rect(0, 0, m_width, m_height); // 检查ROI是否在图像范围内 + Rect cropRect2(0, m_height / 2 - 25, 50, 50); //中左位置 + cropRect2 &= Rect(0, 0, m_width, m_height); Mat cropMat2 = m_image(cropRect2); - Rect cropRect3(m_width - 25, m_height / 2 - 25, 50, 50); // 定义感兴趣的区域的矩形框 - cropRect3 &= Rect(0, 0, m_width, m_height); // 检查ROI是否在图像范围内 + Rect cropRect3(m_width - 25, m_height / 2 - 25, 50, 50); //中右位置 + cropRect3 &= Rect(0, 0, m_width, m_height); Mat cropMat3 = m_image(cropRect3); - Rect cropRect4(0, 0, 25, 25); // 定义感兴趣的区域的矩形框 - cropRect4 &= Rect(0, 0, m_width, m_height); // 检查ROI是否在图像范围内 + Rect cropRect4(0, 0, 25, 25); //左上角位置 + cropRect4 &= Rect(0, 0, m_width, m_height); Mat cropMat4 = m_image(cropRect4); StatisticsRGB(cropMat1); @@ -420,12 +420,20 @@ void MicroImage::CalDistance() { m_image.release(); m_image = cv::Mat(m_height, m_width, CV_8UC3, m_OriginData).clone(); //cv::imwrite(m_ImgName, m_image); - StandardLineDetect(); //标准线段检测 + //StandardLineDetect(); //标准线段检测 先固定值 StatisticsBGColor(); SquareRemove(); - //IsLandRemove(); + +//#if 0 +// IsLandRemove(); +// Binarization(); +// +//#endif + + int dx = 0, dy = 0; CalBorderCrop(dx, dy); + m_knowLength = 148; //先固定 m_DistanceY = 0.2 * dy / m_knowLength; m_DistanceX = 0.2 * dx / m_knowLength; diff --git a/DN_sample/MicroImage.h b/DN_sample/MicroImage.h index 946006c..03a421c 100644 --- a/DN_sample/MicroImage.h +++ b/DN_sample/MicroImage.h @@ -42,7 +42,7 @@ public: uint m_TotalSize; //图片大小 private: cv::Mat m_image; //图片 - int m_knowLength; //已知0.2mm占用的像素个数 + int m_knowLength = 148; //已知0.2mm占用的像素个数 先固定 std::set m_RgbSet; //背景rgb集合 float m_Radio; //宽高比 diff --git a/DN_sample/output/Release/Measure.exe b/DN_sample/output/Release/Measure.exe index 6b1ba1c..ea33c00 100644 Binary files a/DN_sample/output/Release/Measure.exe and b/DN_sample/output/Release/Measure.exe differ diff --git a/DN_sample/output/Release/Measure.pdb b/DN_sample/output/Release/Measure.pdb index 85afa33..af5afd7 100644 Binary files a/DN_sample/output/Release/Measure.pdb and b/DN_sample/output/Release/Measure.pdb differ