zoukankan      html  css  js  c++  java
  • 1.1.2-学习Opencv与MFC混合编程之---画图工具 画直线 画圆 画矩形

    源代码地址:http://download.csdn.net/detail/nuptboyzhb/3961685

    画图工具


    1.     画直线

    Ø  增加‘直线’菜单项,建立类向导;

    Ø  对CXXXXXXView类增加成员变量my_draw_flag.并在构造函数中初始化为0

    Ø  在‘直线’菜单项处理函数中,将my_draw_flag=1;表示画直线

    Ø  增加window消息处理,WM_LBUTTONDOWN 和WM_MOUSEMOVE和WM_LBUTTONUP

    Ø  增加成员变量

    在构造函数里初始化为0;

    增加int型成员变量OnLButtonDownRunFlag,OnLButtonUpRunFlag。并在View类的构造函数中进行初始化为0;

    增加IplImage型成员变量

    Ø  在OnLButtonDown(UINT nFlags, CPoint point)函数中,保存鼠标按下时的点:

    my_cvpoint1=cvPoint(point.x,point.y);

           OnLButtonDownRunFlag=1;

    OnLButtonUpRunFlag=0;

    bufImg=cvCloneImage(workImg);//bufImg是为了保存每次画图结束后的图像。

    Ø  在OnMouseMove(UINT nFlags, CPoint point)函数中,编辑代码如下:

    if(OnLButtonDownRunFlag&&OnLButtonUpRunFlag==0)

          {

                 CvPointiner_point=cvPoint(point.x,point.y);

                 IplImage*src;

                 if(!workImg)

                 {

                        return;

                 }

                 intthickness,colorR,colorG,colorB;

                 thickness=2;//线条宽度

                 colorR=0;

                 colorG=255;

                 colorB=0;

                 src=cvCloneImage(bufImg);

                 switch(my_draw_flag)

                 {

                 case0:

                        break;

                 case1:

                        cvFlip(src);

                        cvLine(src,my_cvpoint1,iner_point,cvScalar(colorR,colorG,colorB),thickness);

                        cvFlip(src);

                        workImg=cvCloneImage(src);//显示当前一条直线

                        Invalidate();//重绘

                        break;

                 }

                 cvReleaseImage(&src);

          }

           CScrollView::OnMouseMove(nFlags,point);

    Ø  鼠标按下的消息处理函数

    void CCVMFCView::OnLButtonUp(UINTnFlags, CPoint point)

         OnLButtonUpRunFlag=1;

              OnLButtonDownRunFlag=0;

     

     

    画矩形

    1.    添加画‘矩形’菜单项

    2.    设置属性如下:

    3.    建立类向导,编辑消息响应函数:

    void CCVMFCView::OnMyDrawRectangle()

    {

          //TODO: Add your command handler code here

          my_draw_flag=2;

    }

    4.    在mousemove消息响应函数里,添加

    cvFlip(src);

    cvRectangle(src,my_cvpoint1,iner_point,cvScalar(colorR,colorG,colorB),thickness);

    cvFlip(src);

    workImg=cvCloneImage(src);//显示当前的矩形

            Invalidate();//重绘


    画圆


    添加菜单的步骤同添加矩形的步骤:

    关键是编写case 3:的代码

           case 3:

                         int r=0;

                         r=(int)sqrt((iner_point.x-my_cvpoint1.x)*(iner_point.x-my_cvpoint1.x)

                                +(iner_point.y-my_cvpoint1.y)*(iner_point.y-my_cvpoint1.y));

                         cvFlip(src);

                         cvCircle(src,my_cvpoint1,r,cvScalar(colorB,colorG,colorR),thickness);

                         cvFlip(src);

                         workImg=cvCloneImage(src);//显示当前的矩形

                         Invalidate();//重绘

                         break;


     

    from:http://blog.csdn.net/nupt123456789/article/details/7100144

  • 相关阅读:
    css backgroud属性与雪碧技术
    css margin 外边距塌陷问题
    css 浮动元素与清除浮动
    css 盒模型的概念与使用
    七年iOS架构师教你如何一举拿下35K的Offer,(附面试技巧)
    iOS开发者月薪想要突破30K,需要经历+提升些什么?
    月薪 8K 与30K的程序员 区别到底在哪里?
    那些月薪35K以上的iOS开发者 都掌握了什么技能?
    从事 iOS 开发8年的面经——送给准备跳槽的你!
    想进BAT大厂的 iOS程序员,看完这个你还觉得Offer难拿吗???
  • 原文地址:https://www.cnblogs.com/lidabo/p/3501312.html
Copyright © 2011-2022 走看看