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));