【发布时间】:2015-07-02 12:23:54
【问题描述】:
我正在尝试使用 javacv 在 java 中找到 here 的面部对齐实现 C++ 位,但我被困在如何通过
point2f[] 在 getAffineTransform() 中作为 point2f。
这是我能想到的;
//face alignment begin
Point2f[] srcTri = new Point2f[3];
Point2f[] dstTri = new Point2f[3];
Mat src_mat= new Mat(orig);
Mat dst_mat= new Mat(input);
Mat warp_mat = new Mat( 2, 3, CV_32FC1);
//Set the dst image the same type and size as src
Mat warp_dst = new Mat(src_mat.rows(), src_mat.cols(), src_mat.type());
//Set your 3 points to calculate the Affine Transform
srcTri[0] = new Point2f((float)landmarks[5*2], (float)landmarks[5*2+1]);
srcTri[1] = new Point2f((float)landmarks[6*2], (float)landmarks[6*2+1]);
srcTri[2] = new Point2f((float)landmarks[0*2], (float)landmarks[0*2+1]);
dstTri[0] = new Point2f((float)landmarks[5*2], (float)landmarks[5*2+1]);
dstTri[1] = new Point2f((float)landmarks[6*2], (float)landmarks[6*2+1]);
dstTri[2] = new Point2f((float)landmarks[0*2], (float)landmarks[0*2+1]);
//Get the Affine Transform
warp_mat = getAffineTransform( srcTri, dstTri ); //This is where I have problems. getAffineTransform() expects Point2f but I have Point2f[]
//Apply the Affine Transform just found to the src image
warpAffine(src_mat, warp_dst, warp_mat, warp_dst.size());
//show images
imshow("src", src_mat);
imshow("dst", dst_mat);
imshow("warp_dst", warp_dst);
waitKey(0);
//face alignment end
请告诉我如何将 srcTri 和 dstTri 作为 Point2f 传递给 getAffineTransform() 或如何将 Point2f[] 转换为 Point2f。甚至有可能这样做吗? 如何将地标放入可以在 getAfflineTransform() 中作为参数接受的 Point2f 中?
非常感谢您在此处导航方面的帮助。
【问题讨论】:
标签: java c++ opencv javacv affinetransform