<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    1.1.2-學習Opencv與MFC混合編程之---畫圖工具 畫直線 畫圓 畫矩形

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    源代碼地址: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

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全