| 770 | //DDD |
| 771 | } |
| 772 | BOOL CMatchToolDlg::Match () |
| 773 | { |
| 774 | if (m_matSrc.empty () || m_matDst.empty ()) |
| 775 | return FALSE; |
| 776 | if ((m_matDst.cols < m_matSrc.cols && m_matDst.rows > m_matSrc.rows) || (m_matDst.cols > m_matSrc.cols && m_matDst.rows < m_matSrc.rows)) |
| 777 | return FALSE; |
| 778 | if (m_matDst.size ().area () > m_matSrc.size ().area ()) |
| 779 | return FALSE; |
| 780 | if (!m_TemplData.bIsPatternLearned) |
| 781 | return FALSE; |
| 782 | UpdateData (1); |
| 783 | double d1 = clock (); |
| 784 | //決定金字塔層數 總共為1 + iLayer層 |
| 785 | int iTopLayer = GetTopLayer (&m_matDst, (int)sqrt ((double)m_iMinReduceArea)); |
| 786 | //建立金字塔 |
| 787 | vector<Mat> vecMatSrcPyr; |
| 788 | if (m_ckBitwiseNot.GetCheck ()) |
| 789 | { |
| 790 | Mat matNewSrc = 255 - m_matSrc; |
| 791 | buildPyramid (matNewSrc, vecMatSrcPyr, iTopLayer); |
| 792 | imshow ("1", matNewSrc); |
| 793 | moveWindow ("1", 0, 0); |
| 794 | } |
| 795 | else |
| 796 | buildPyramid (m_matSrc, vecMatSrcPyr, iTopLayer); |
| 797 | |
| 798 | s_TemplData* pTemplData = &m_TemplData; |
| 799 | |
| 800 | //第一階段以最頂層找出大致角度與ROI |
| 801 | double dAngleStep = atan (2.0 / max (pTemplData->vecPyramid[iTopLayer].cols, pTemplData->vecPyramid[iTopLayer].rows)) * R2D; |
| 802 | |
| 803 | vector<double> vecAngles; |
| 804 | |
| 805 | if (m_bToleranceRange) |
| 806 | { |
| 807 | if (m_dTolerance1 >= m_dTolerance2 || m_dTolerance3 >= m_dTolerance4) |
| 808 | { |
| 809 | AfxMessageBox (L"角度範圍設定異常,左值須小於右值"); |
| 810 | return FALSE; |
| 811 | } |
| 812 | for (double dAngle = m_dTolerance1; dAngle < m_dTolerance2 + dAngleStep; dAngle += dAngleStep) |
| 813 | vecAngles.push_back (dAngle); |
| 814 | for (double dAngle = m_dTolerance3; dAngle < m_dTolerance4 + dAngleStep; dAngle += dAngleStep) |
| 815 | vecAngles.push_back (dAngle); |
| 816 | } |
| 817 | else |
| 818 | { |
| 819 | if (m_dToleranceAngle < VISION_TOLERANCE) |
| 820 | vecAngles.push_back (0.0); |
| 821 | else |
| 822 | { |
| 823 | for (double dAngle = 0; dAngle < m_dToleranceAngle + dAngleStep; dAngle += dAngleStep) |
| 824 | vecAngles.push_back (dAngle); |
| 825 | for (double dAngle = -dAngleStep; dAngle > -m_dToleranceAngle - dAngleStep; dAngle -= dAngleStep) |
| 826 | vecAngles.push_back (dAngle); |
| 827 | } |
| 828 | } |
| 829 |
nothing calls this directly
no test coverage detected