线图像的第四变,相对坐标系工具(二)

上一节完成了roibase3下层基础类,接下来是中层操作类ROI_coord:

   public class ROI_coord
    {

        public RoiBase3 m_RoiBase;
        public E_HANDLES m_eHandle;
        public Cursor m_cur;
        public ROI_coord()
        {
            m_RoiBase = new RoiBase3();
            m_cur = Cursors.Arrow;
        }
        public void DrawRectFrame(bool lbtn, PointF point)
        {
            //  COOR ret=new COOR();
            if (lbtn)
            {
                switch (m_eHandle)
                {
                    case E_HANDLES.E_HANDLE_INSIDE://操作一,拖动
                        m_RoiBase.Drag(point);//RcCentreLine和startLine两条线相交处是原点,此处拖动原点
                        break;//以前工具拖动为RcCentreLine中心点
                    case E_HANDLES.E_HANDLE_SOUTH:
                        m_RoiBase.DragTolerancey(point);//操作二,弹性(此处是y轴长短变化
                        break;
                    case E_HANDLES.E_HANDLE_EAST:
                        m_RoiBase.DragXYandRotate(point);//操作三,旋转
                        break;
                    default:
                        break;
                }
            }
            else
            {
                m_eHandle = (E_HANDLES)m_RoiBase.IsPointInRect(point);
            }
            Insteadof((int)m_eHandle);

            //   return ret;            
        }

 private void Insteadof(int intcursor){.......}

}

好了,下面我们在form中实现它,无非三步:

第一,声明  private ROI_coord m_roiCoord显示;并在form()中初始化: m_roiCoord显示 = new ROI_coord();

第二,控件pictureBox响应mousemove:

   private void pictureBoxcorrectimg_MouseMove(object sender, MouseEventArgs e)
        {
            PointF point = new PointF(e.X, e.Y);      
            bool status = false;
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                status = true;
            }
         
            this.Cursor = m_roiCoord显示.m_cur;
            m_roiCoord显示.DrawRectFrame(status, point);
             pictureBoxcorrectimg.Invalidate(false);
        }

第三,控件pictureBox响应paint事件:    private void pictureBoxcorrectimg_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;          
            m_roiCoord显示.m_RoiBase.DrawLineAndRect(g, new Pen(Color.Red, 1));            
        }

ok!完成。这个东西用处很大,有它,心才能放下,所有的努力,终于可以长长的出一口气了,以后的标定,fixture都会用到它。况且我们的计算机视觉偏重测量,测量是在坐标系中进行的,测量是在相对坐标系(局部)中进行更准确。

下一节的主题是,我们来看一看线工具的第五变化,看它是怎么学习(learning)和匹配(模式识别)的,正是我发现线工具有识别匹配功能,实践此想法后,才唤起我写下以上博客的初心。

(待续,慢慢来...............)下面是效果图:

猜你喜欢

转载自blog.csdn.net/ganggangwawa/article/details/89553333
今日推荐