调整位置

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
// 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.

View File

@ -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

View File

@ -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,22 +166,28 @@ 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_f2.SetImgPos();
m_video.ShowWindow(SW_HIDE);
m_f2.SetImgPos();
CDC* pDC = GetDC(); // 获取设备上下文
@ -199,6 +206,7 @@ BOOL CDN_sampleDlg::OnInitDialog()
Test();
}
if (m_video.GetVideoDeviceCount() == 0) return false;
m_video.SetUseVideoFilter(1);
@ -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);

Binary file not shown.

View File

@ -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;

View File

@ -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<int> m_RgbSet; //背景rgb集合
float m_Radio; //宽高比

Binary file not shown.

Binary file not shown.