opencv實現halcon函數 VectorAngleToRigid

話不多說,先上代碼:

struct sHomMatrix
{
    double a11;
    double a12;
    double a13;
    double a21;
    double a22;
    double a23;
    /*缺省值:100,010;*/
    sHomMatrix()
    {
        a11=1;
        a12=0;
        a13=0;
        a21=0;
        a22=1;
        a23=0;
    }
};

sHomMatrix cvVectorAngleToRigid(const cv::Point2f & tempCentre, const float org_angle, const cv::Point2f & matchCentre, const float matchAngle)
{
    sHomMatrix homMat;
    /* 獲取旋轉矩陣 */
    cv::Mat rotMat = cv::getRotationMatrix2D(tempCentre, (matchAngle-org_angle), 1);
    /* 轉換成3*3矩陣 */
    cv::Mat rotMat2 = cv::Mat::zeros(3, 3, CV_32FC1);
    rotMat2.at<float>(0, 0) = (float)rotMat.at<double>(0, 0);
    rotMat2.at<float>(0, 1) = (float)rotMat.at<double>(0, 1);
    rotMat2.at<float>(0, 2) = (float)rotMat.at<double>(0, 2);
    rotMat2.at<float>(1, 0) = (float)rotMat.at<double>(1, 0);
    rotMat2.at<float>(1, 1) = (float)rotMat.at<double>(1, 1);
    rotMat2.at<float>(1, 2) = (float)rotMat.at<double>(1, 2);
    rotMat2.at<float>(2, 2) = 1;
    /* 平移矩陣 */
    cv::Mat t_mat = cv::Mat::zeros(3, 3, CV_32FC1);
    t_mat.at<float>(0, 0) = 1;
    t_mat.at<float>(0, 2) = matchCentre.x - tempCentre.x;//235 - 190;     
    t_mat.at<float>(1, 1) = 1;
    t_mat.at<float>(1, 2) = matchCentre.y - tempCentre.y;//251 - 190;
    t_mat.at<float>(2, 2) = 1;
    /* 平移矩陣*旋轉矩陣,得到仿射變換陣 */
    cv::Mat resMat = t_mat*rotMat2;
    homMat.a11 = (double)resMat.at<float>(0, 0);
    homMat.a12 = (double)resMat.at<float>(0, 1);
    homMat.a13 = (double)resMat.at<float>(0, 2);
    homMat.a21 = (double)resMat.at<float>(1, 0);
    homMat.a22 = (double)resMat.at<float>(1, 1);
    homMat.a23 = (double)resMat.at<float>(1, 2);
    return homMat;
}

 

參數說明:

const cv::Point2f & tempCentre :模板圖像中心點座標;

const float org_angle: 模板角度,一般爲0;

const cv::Point2f & matchCentre:匹配中心點座標;

const float matchAngle:模板角度爲0時,目標圖像相對模板旋轉角度,如果模板角度不爲0,目標圖像角度;

應用場景:

進行模板匹配後,已經獲知 目標圖像中匹配區域,相對於模板旋轉了多少度;這時,要了解源圖和目標圖像的仿射變換矩陣,該怎樣計算?

這裏用到的原理就是,仿射變換矩陣(3x3)=平移矩陣(3x3)* 旋轉矩陣(3x3);

其中,旋轉矩陣的中心,就是模板中心點;

平移矩陣的偏移量tx,ty,就是匹配點相對於模板中心點的位移;

原理相對簡單,不贅述。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章