调整位置

This commit is contained in:
wangxx1809 2024-07-18 18:17:33 +08:00
parent d337685043
commit 205e851201
8 changed files with 53 additions and 22 deletions

View File

@ -70,6 +70,9 @@ BOOL CDN_sampleApp::InitInstance()
// TODO: Place code here to handle when the dialog is // TODO: Place code here to handle when the dialog is
// dismissed with Cancel // dismissed with Cancel
} }
else if (nResponse == -1) {
printf("先安装sdk\n");
}
// Since the dialog has been closed, return FALSE so that we exit the // Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump. // application, rather than start the application's message pump.

View File

@ -165,16 +165,16 @@ BEGIN
DEFPUSHBUTTON "OK",IDOK,178,7,50,16,WS_GROUP DEFPUSHBUTTON "OK",IDOK,178,7,50,16,WS_GROUP
END 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 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW EXSTYLE WS_EX_APPWINDOW
CAPTION "image measure" CAPTION "image measure"
FONT 8, "MS Shell Dlg", 0, 0, 0x1 FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN 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 LISTBOX IDC_LIST2,5,5,90,480,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
CONTROL "",IDC_TAB1,"SysTabControl32",0x0,100,5,740,480 CONTROL "",IDC_TAB1,"SysTabControl32",0x0,100,5,720,480
PUSHBUTTON "最小化",IDC_BTN_MINIMIZE,845,4,50,12 PUSHBUTTON "最小化",IDC_BTN_MINIMIZE,757,4,50,12
END END
IDD_FORM2 DIALOGEX 0, 0, 453, 304 IDD_FORM2 DIALOGEX 0, 0, 453, 304

View File

@ -117,6 +117,7 @@ void CDN_sampleDlg::SelectOneImg() {
m_tab.SetCurSel(0); m_tab.SetCurSel(0);
m_f1.ShowWindow(SW_SHOW); m_f1.ShowWindow(SW_SHOW);
m_f2.ShowWindow(SW_HIDE); m_f2.ShowWindow(SW_HIDE);
m_video.ShowWindow(SW_HIDE);
m_f2.SetMicroImage(m_ImgVec[index]); m_f2.SetMicroImage(m_ImgVec[index]);
if (m_f1.hb != NULL) { if (m_f1.hb != NULL) {
@ -165,24 +166,30 @@ BOOL CDN_sampleDlg::OnInitDialog()
m_tab.InsertItem(0, _T("抓拍图片")); m_tab.InsertItem(0, _T("抓拍图片"));
m_tab.InsertItem(1, _T("距离测量")); m_tab.InsertItem(1, _T("距离测量"));
m_tab.InsertItem(2, _T("实时预览"));
//m_f1.SetParent(&m_tab); //m_f1.SetParent(&m_tab);
m_f1.Create(IDD_FORM2, &m_tab); m_f1.Create(IDD_FORM2, &m_tab);
m_f2.Create(IDD_CALIMAGE, &m_tab); m_f2.Create(IDD_CALIMAGE, &m_tab);
m_video.SetParent(&m_tab);
RECT rect; RECT rect;
m_tab.GetClientRect(&rect); m_tab.GetClientRect(&rect);
rect.top += 22;//对坐标做一些微调这26是选项卡按钮的高度 rect.top += 22; //对坐标做一些微调这26是选项卡按钮的高度
rect.left += 2;//这是边框的宽度 rect.left += 2; //这是边框的宽度
m_f1.SetWindowPos(NULL, 0, 0, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER); 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_f2.SetWindowPos(NULL, 0, 0, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER);
m_f1.MoveWindow(&rect); m_f1.MoveWindow(&rect);
m_f2.MoveWindow(&rect); m_f2.MoveWindow(&rect);
m_f1.ShowWindow(SW_SHOW); m_f1.ShowWindow(SW_SHOW);
m_f2.ShowWindow(SW_HIDE); m_f2.ShowWindow(SW_HIDE);
m_video.ShowWindow(SW_HIDE);
m_f2.SetImgPos(); m_f2.SetImgPos();
CDC* pDC = GetDC(); // 获取设备上下文 CDC* pDC = GetDC(); // 获取设备上下文
TEXTMETRIC tm; // 获取字体的高度 TEXTMETRIC tm; // 获取字体的高度
pDC->GetTextMetrics(&tm); pDC->GetTextMetrics(&tm);
@ -199,7 +206,8 @@ BOOL CDN_sampleDlg::OnInitDialog()
Test(); Test();
} }
if (m_video.GetVideoDeviceCount() == 0) return false;
if (m_video.GetVideoDeviceCount() == 0) return false;
m_video.SetUseVideoFilter(1); m_video.SetUseVideoFilter(1);
m_video.SetConnected(TRUE); m_video.SetConnected(TRUE);
@ -296,12 +304,15 @@ BOOL CDN_sampleDlg::OnInitDialog()
//m_green = m_video.GetAWBG(m_device.GetCurSel()); //m_green = m_video.GetAWBG(m_device.GetCurSel());
//m_blue = m_video.GetAWBB(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 if (!m_video.EnableMicroTouch(true)) { //设置touch enable 启用返回false
AfxMessageBox(_T("EnableMicroTouch 启用"), MB_ICONHAND); //AfxMessageBox(_T("EnableMicroTouch 启用"), MB_ICONHAND);
} }
else { else {
AfxMessageBox(_T("EnableMicroTouch 取消"), MB_ICONERROR); AfxMessageBox(_T("EnableMicroTouch 启用失败"), MB_ICONERROR);
} }
return TRUE; // return TRUE unless you set the focus to a control return TRUE; // return TRUE unless you set the focus to a control
@ -309,7 +320,7 @@ BOOL CDN_sampleDlg::OnInitDialog()
void CDN_sampleDlg::Test() { 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) { for (int i = 0; i < sizeof(path) / sizeof(CString); ++i) {
std::string imgpath = CW2A(m_ExePath + path[i]); std::string imgpath = CW2A(m_ExePath + path[i]);
cv::Mat imgMat = cv::imread(imgpath); cv::Mat imgMat = cv::imread(imgpath);
@ -443,16 +454,24 @@ void CDN_sampleDlg::ChangeTab(NMHDR* pNMHDR, LRESULT* pResult)
m_f1.ClearImg(); m_f1.ClearImg();
m_f1.ShowWindow(SW_SHOW); m_f1.ShowWindow(SW_SHOW);
m_f2.ShowWindow(SW_HIDE); m_f2.ShowWindow(SW_HIDE);
m_video.ShowWindow(SW_HIDE);
break; break;
case 1: case 1:
m_f2.ClearImg(); m_f2.ClearImg();
m_f2.ShowWindow(SW_SHOW); m_f2.ShowWindow(SW_SHOW);
m_f1.ShowWindow(SW_HIDE); 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; break;
default: default:
m_f1.ClearImg(); m_f1.ClearImg();
m_f1.ShowWindow(SW_SHOW); m_f1.ShowWindow(SW_SHOW);
m_f2.ShowWindow(SW_HIDE); m_f2.ShowWindow(SW_HIDE);
m_video.ShowWindow(SW_HIDE);
break; break;
} }
@ -465,13 +484,14 @@ BOOL CDN_sampleDlg::PreTranslateMessage(MSG* pMsg)
{ {
if (WM_RBUTTONUP == pMsg->message) if (WM_RBUTTONUP == pMsg->message)
{ {
if (m_listBox.GetCount() == 0) return FALSE;
CPoint pt; CPoint pt;
CRect rtClient; CRect rtClient;
m_listBox.GetClientRect(&rtClient); m_listBox.GetClientRect(&rtClient);
m_listBox.ClientToScreen(&rtClient); m_listBox.ClientToScreen(&rtClient);
INT iScrollPos = m_listBox.GetScrollPos(SB_VERT); INT iScrollPos = m_listBox.GetScrollPos(SB_VERT);
GetCursorPos(&pt); GetCursorPos(&pt);
int nItemHeight = m_nFontHeight; // 假设加上一些额外空间作为边距 int nItemHeight = m_listBox.GetItemHeight(0);
int iSelect = (pt.y - rtClient.top + iScrollPos * nItemHeight) / nItemHeight; int iSelect = (pt.y - rtClient.top + iScrollPos * nItemHeight) / nItemHeight;
if (iSelect < m_listBox.GetCount()) { if (iSelect < m_listBox.GetCount()) {
m_listBox.SetCurSel(iSelect); m_listBox.SetCurSel(iSelect);

Binary file not shown.

View File

@ -58,20 +58,20 @@ void MicroImage::CropByBorder(int yBegin, int yEnd, int xBegin, int xEnd) {
} }
void MicroImage::StatisticsBGColor() { 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是否在图像范围内 cropRect1 &= Rect(0, 0, m_width, m_height); // 检查ROI是否在图像范围内
Mat cropMat1 = m_image(cropRect1); Mat cropMat1 = m_image(cropRect1);
Rect cropRect2(0, m_height / 2 - 25, 50, 50); // 定义感兴趣的区域的矩形框 Rect cropRect2(0, m_height / 2 - 25, 50, 50); //中左位置
cropRect2 &= Rect(0, 0, m_width, m_height); // 检查ROI是否在图像范围内 cropRect2 &= Rect(0, 0, m_width, m_height);
Mat cropMat2 = m_image(cropRect2); Mat cropMat2 = m_image(cropRect2);
Rect cropRect3(m_width - 25, m_height / 2 - 25, 50, 50); // 定义感兴趣的区域的矩形框 Rect cropRect3(m_width - 25, m_height / 2 - 25, 50, 50); //中右位置
cropRect3 &= Rect(0, 0, m_width, m_height); // 检查ROI是否在图像范围内 cropRect3 &= Rect(0, 0, m_width, m_height);
Mat cropMat3 = m_image(cropRect3); Mat cropMat3 = m_image(cropRect3);
Rect cropRect4(0, 0, 25, 25); // 定义感兴趣的区域的矩形框 Rect cropRect4(0, 0, 25, 25); //左上角位置
cropRect4 &= Rect(0, 0, m_width, m_height); // 检查ROI是否在图像范围内 cropRect4 &= Rect(0, 0, m_width, m_height);
Mat cropMat4 = m_image(cropRect4); Mat cropMat4 = m_image(cropRect4);
StatisticsRGB(cropMat1); StatisticsRGB(cropMat1);
@ -420,12 +420,20 @@ void MicroImage::CalDistance() {
m_image.release(); m_image.release();
m_image = cv::Mat(m_height, m_width, CV_8UC3, m_OriginData).clone(); m_image = cv::Mat(m_height, m_width, CV_8UC3, m_OriginData).clone();
//cv::imwrite(m_ImgName, m_image); //cv::imwrite(m_ImgName, m_image);
StandardLineDetect(); //标准线段检测 //StandardLineDetect(); //标准线段检测 先固定值
StatisticsBGColor(); StatisticsBGColor();
SquareRemove(); SquareRemove();
//IsLandRemove();
//#if 0
// IsLandRemove();
// Binarization();
//
//#endif
int dx = 0, dy = 0; int dx = 0, dy = 0;
CalBorderCrop(dx, dy); CalBorderCrop(dx, dy);
m_knowLength = 148; //先固定
m_DistanceY = 0.2 * dy / m_knowLength; m_DistanceY = 0.2 * dy / m_knowLength;
m_DistanceX = 0.2 * dx / m_knowLength; m_DistanceX = 0.2 * dx / m_knowLength;

View File

@ -42,7 +42,7 @@ public:
uint m_TotalSize; //图片大小 uint m_TotalSize; //图片大小
private: private:
cv::Mat m_image; //图片 cv::Mat m_image; //图片
int m_knowLength; //已知0.2mm占用的像素个数 int m_knowLength = 148; //已知0.2mm占用的像素个数 先固定
std::set<int> m_RgbSet; //背景rgb集合 std::set<int> m_RgbSet; //背景rgb集合
float m_Radio; //宽高比 float m_Radio; //宽高比

Binary file not shown.

Binary file not shown.