<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.3-學習Opencv與MFC混合編程之---畫圖工具 通過對話框進行工具的參數設置 畫曲線 繪圖校正

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

    源代碼:http://download.csdn.net/detail/nuptboyzhb/3961688

    l 對話框

    1.“插入”->“資源”->“對話框”

    2.對話框屬性如下:

    RFID設備管理軟件

    雙擊對話框,建立對話框類。取名:LineParameter

    3.在LineParameter.h頭文件中添加#include "resource.h",否則:會報錯:IDD_DIALOG4未定義

    4.為LineParameter類增加如下成員變量:

           int m_colorR;

           int m_colorG;

           int m_colorB;

           int m_PenWidth;

    5.在構造函數中,初始化變量:

    LineParameter::LineParameter(CWnd*pParent /*=NULL*/)

           : CDialog(LineParameter::IDD, pParent)

    {

           //{{AFX_DATA_INIT(LineParameter)

                  // NOTE: the ClassWizard will addmember initialization here

           //}}AFX_DATA_INIT

           //初始化數據

           m_colorB=0;

           m_colorG=0;

           m_colorR=0;

           m_PenWidth=1;

    }

    6.在數據交換函數里,交換成員變量與相應控件的數據:

    voidLineParameter::DoDataExchange(CDataExchange* pDX)

    {

           CDialog::DoDataExchange(pDX);

           //{{AFX_DATA_MAP(LineParameter)

                  // NOTE: the ClassWizard will addDDX and DDV calls here

           DDX_Text(pDX, IDC_COLOR_R,m_colorR);

        DDV_MinMaxInt(pDX,m_colorR, 0, 255);

           DDX_Text(pDX, IDC_COLOR_G,m_colorG);

        DDV_MinMaxInt(pDX,m_colorG, 0, 255);

           DDX_Text(pDX, IDC_COLOR_B,m_colorB);

        DDV_MinMaxInt(pDX,m_colorB, 0, 255);

           DDX_Text(pDX, IDC_WIDTH, m_PenWidth);

           DDV_MinMaxInt(pDX, m_PenWidth, 1, 50);

           //}}AFX_DATA_MAP

    }

    7.為確認按鍵添加消息處理函數:

    voidLineParameter::OnOK()

    {

           // TODO: Add extra validation here

           UpdateData(TRUE);  // 把控件上的數據寫入成員變量

          

           if ((m_colorR>=0&&m_colorR<=255)&&(m_colorG>=0&&m_colorG<=255)&&(m_colorB>=0&&m_colorB<=255))

           {

                  CDialog::OnOK();  // 關閉對話框

           }

           else

           {

                  MessageBox("請輸入0-255之間的數字", "錯誤提示", MB_ICONEXCLAMATION | MB_OK);

           }

    }

    l 使用對話框

    1.    在CXXXXXXView類中增加成員變量,并在構造函數中進行初始化;

    int m_LineWidth;

    int m_ColorB;

    int m_ColorG;

    int m_ColorR;

    2.    分別在‘直線’,‘圓’,‘矩形’菜單項的消息處理函數里添加LineParameter對話框對象;并將對話框輸入的數據傳遞給相應的成員變量:

          LineParameter dlg;

           if(dlg.DoModal() != IDOK)

           {

                  return;

           }

           m_ColorR=dlg.m_colorR;

           m_ColorG=dlg.m_colorG;

           m_ColorB=dlg.m_colorB;

           m_LineWidth=dlg.m_PenWidth;

           //刪除對話框

           deletedlg;

    3.    修改OnMouseMove消息處理函數,將CXXXXView類的相應成員變量值賦值于畫圖所需的參數,(RGB顏色和線寬)



    畫圖準確定的校正問題:

    問題的提出:

    運行結果表明:鼠標按下的點,與圖像上顯示的點有較大的差距。而鼠標移動時的點,和圖像上的點完全一致。因此考慮將第一次鼠標移動后的點作為畫線的起始點:

    1.    添加CXXXXView成員變量,OnMouseMoveFlag,用于記錄鼠標移動的次數。在構造函數里將其初始化為0;

    2.    每次運行OnMouseMove消息處理函數,該標志加一。

    3.    當OnMouseMoveFlag的時候,將此時的點,保存到起始點:

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

    4.    為防止OnMouseMoveFlag增加過快而溢出,在此后的語句中將其賦值為3,:OnMouseMoveFlag=3;

    5.    在每次鼠標按下和鼠標抬起時均初始化該變量

    OnMouseMoveFlag=0;


    畫曲線

    1.    增加‘曲線’菜單項;設置相應的屬性,添加類向導,編輯消息響應函數:

    voidCCVMFCView::OnMyDrawCurve()

    {

    // TODO: Add your command handler code here

    my_draw_flag=4;

    LineParameter dlg;

    if (dlg.DoModal() != IDOK)

    {

               return;

    }

    m_ColorR=dlg.m_colorR;

    m_ColorG=dlg.m_colorG;

    m_ColorB=dlg.m_colorB;

    m_LineWidth=dlg.m_PenWidth;

    //刪除對話框

     deletedlg;

    }

    2.    修改OnMouseMove消息處理函數。增加case 4:的消息處理:

    case 4://當選擇畫曲線時

                        cvFlip(workImg);

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

                        cvFlip(workImg);

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

                        Invalidate();//重繪

                        break;


     

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

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