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