Learning opencv续不足(六)线图像的设计C

线图像RoiBase类比起感兴趣区域RoiBase1类要复杂一些,关键是直线的旋转带来的

我们要操作他,还要封装到

  public class ROI//设计的线图像工具
    {

        public RoiBase m_RoiBase;
        public E_HANDLES m_eHandle;
        public Cursor m_cur;
        public ROI()
        {
            m_RoiBase = new RoiBase();
            m_cur = Cursors.Arrow;
        }
        public void DrawRectFrame(bool lbtn, PointF point)//感知两个鼠标操作
        {
            if (lbtn)
            {
                switch (m_eHandle)
                {
                    case E_HANDLES.E_HANDLE_INSIDE:
                        m_RoiBase.Drag(point);//移动操作
                        break;             
                    case E_HANDLES.E_HANDLE_EAST:
                        m_RoiBase.DragXYandRotate(point);//操作rccentreline.endPt(x,y),并旋转,

                        break;                   
                    default:
                        break;
                }
            }
            else
            {
                m_eHandle = (E_HANDLES)m_RoiBase.IsPointInRect(point);
            }
            Insteadof((int)m_eHandle);

            return;
        }
        private void Insteadof(int intcursor)
        {
            switch (intcursor)
            {
             ....................   (与感兴趣区域相同)         
            }
            return;
        }
    }

准备工作已经做完,在pictureBoxRoiImg控件显示出来。

1, 声明 private ROI m_线图像;并在form()中初始化 m_线图像 = new ROI ();

2,在pictureBoxRoiImg_mouseMove函数中

             PointF point = new PointF(e.X, e.Y);     
            bool status = false;
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                status = true;
            }
            m_线图像.DrawRectFrame(status, point);
            this.Cursor = m_线图像.m_cur;

            pictureBoxRoiImg.Invalidate(false);

3,在pictureBoxRoiImg_Paint函数中

           Graphics g = e.Graphics;
            Pen p = new Pen(Color.Green, 1);

            m_线图像.m_RoiBase.DrawLineAndRect(g, p, glob_Dir);//glob_Dir默认白到黑=0

完成上面三步,线图像就画好了,而且可以拖动,旋转,拉伸。既然m_线图像.m_RoiBase.startLine是我们的线图像,

我们应该求取线上的每一个(x,y),并且得到颜色灰度,甚至求梯度线图像,找到感知到的穿越点,使用梯度和的方法,画出叉叉。(待续................)

猜你喜欢

转载自blog.csdn.net/ganggangwawa/article/details/89074436