JavaCV cvEstimateRigidTransform函數使用心得

JavaCV cvEstimateRigidTransform函數使用心得

@Date 2018.09.27

函數定義
  • 對應OpenCV中的estimateRigidTransform函數
    • 此函數用作根據變換矩陣對圖片進行指定大小的變換
    • Mat estimateRigidTransform(InputArray src,InputArray dst,bool fullAffine)
    • src : 變換前的圖片關鍵點
    • dst : 期望變換後的圖片關鍵點
    • fullAffine : 1(全仿射變換), 0(帶有約束的仿射變換)
    • 返回值 : 得到變換後的圖片MAT
使用場景
  • 項目中實際場景可能爲在一張圖片中, 切出人臉圖片. 但是人臉圖片是根據座標切割, 圖片的像素大小是不固定的.
    現在可以根據矩陣變換, 把所有人臉圖片歸一到指定大小, 比如80 * 80
JavaCV
  • 在JavaCV中參數傳遞都是以Mat對象傳遞
  • 需要提前開闢好關鍵點對象的空間
// pointer存儲關鍵點矩陣信息
Point2f pointerX = new Point2f();
Point2f pointerY = new Point2f();
// 轉換pointer到mat
Mat matSrcA = new Mat(3, 2, CV_32FC1, pointerX);
Mat matSrcB = new Mat(3, 2, CV_32FC1, pointerY);

// Javacv中返回值需要提前開闢傳入
Point2f cv = new Point2f();
Mat cvEstimateOut = new Mat(2, 3, CV_32FC1, cv);
// 關鍵點矩陣轉換
cvEstimateRigidTransform(new CvMat(matSrcA), new CvMat(matSrcB), new CvMat(cvEstimateOut), 0);

// JavaCV函數 : 根據前後關鍵點矩陣, 進行指定圖片大小的變換
Mat result = new Mat(80, 80, CV_8UC3);
warpAffine(matImage, result, cvEstimateOut, new Size(80, 80));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章