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

  • 相关阅读:
    rest_framework的频率限制和简单操作
    python自定义分页代码
    一些对于python帮助很大的实用博客网址
    Python下的Django极验滑动验证码的使用
    Django logging配置
    Java并发的四种风味:Thread、Executor、ForkJoin和Actor
    10个经典的Java面试题集合
    十大编程算法助程序员走上高手之路
    简单程序
    C++学习笔记
  • 原文地址:https://www.cnblogs.com/lidabo/p/3501312.html
Copyright © 2011-2022 走看看