(二)MFC&Halcon混合编程之滑动控件调整阈值

在上一节的基础之上,我多增加了一个通过滑动控件来修改阈值的操作。
接下来小石讲解如何实现,先看如下图所示的最终图片:
(二)MFC&Halcon混合编程之滑动控件调整阈值_第1张图片

我只是简单的在下面增加一个滑动控件,通过控件来调整阈值。

一、增加成员变量

第一步:添加必要的成员变量。在CHalconMFCDlg.h 中添加几个成员变量。

CSliderCtrl m_ctrlSlider;
int m_threshold;//设置阈值法的阈值
BOOL m_IsEmpty; //判断是否已加载图像

二、初始化控件

可以在滑动控件右键,然后添加变量,选择空间变量。添加以后,将会在下图出现这一行代码。

voidCHalconMFCDlg::DoDataExchange(CDataExchange* pDX)
{
    //这个函数用于控件与类成员交换数据用
    CDialog::DoDataExchange(pDX);
     DDX_Control(pDX, IDC_SLIDER1, m_ctrlSlider);//滑动条控件与成员变量的关联
}

三、初始化设置

在CHalconMFCDlg::OnInitDialog() 里面进行额外的初始化操作。

BOOL CHalconMFCDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    …………
    //滑动块初始化
    m_ctrlSlider.SetRange(0,255);        //设置滑块位置的最大值和最小值
    m_ctrlSlider.SetPos(125);            //设置滑块的默认当前位置

    //初始化图像加载标识
    m_IsEmpty = FALSE; 
    returnTRUE; // 除非将焦点设置到控件,否则返回TRUE
}   

四、滑动控件添加消息处理函数

void CHalconMFCDlg::OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMCUSTOMDRAW pNMCD = reinterpret_cast(pNMHDR);
    // TODO: Add your control notification handler code here
    *pResult = 0;
    intnPos = m_ctrlSlider.GetPos(); //获得滑块的当前位置

    CString str="";
    str.Format("%d",nPos);
    SetDlgItemText(IDC_EDITSlide,str);//将当前的值发送到编辑框
}
void CHalconMFCDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // TODO: Add your message handler code here and/or call default
    CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
    CSliderCtrl *pSlidCtrl=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1);
    m_threshold=pSlidCtrl->GetPos();//取得当前位置值
    if( m_IsEmpty == TRUE)//如果窗口中没有图像,则不作处理
    {
        set_color(WindowHandle2,"red");
        threshold(Image, &Region, 0, m_threshold);
        connection(Region, &ConnectedRegions);
        select_shape(ConnectedRegions, &SelectedRegions, "rect2_len1", "and", 500, 550);
        closing_rectangle1(SelectedRegions, &RegionClosing, 80, 80);
        difference(RegionClosing, SelectedRegions, &RegionDifference);
        connection(RegionDifference, &ConnectedRegions1);
        select_shape(ConnectedRegions1, &SelectedRegions1, "area", "and", 500, 99999);
        set_part(WindowHandle2,0,0,Height-1,Width-1);
        clear_window(WindowHandle2);
        disp_obj(Image, WindowHandle2);
        disp_obj(SelectedRegions1, WindowHandle2);
    }
    else
    {
        MessageBox("请加载图像!");
    }
}

五、运行结果

(二)MFC&Halcon混合编程之滑动控件调整阈值_第2张图片

你可能感兴趣的:((二)MFC&Halcon混合编程之滑动控件调整阈值)