我正在尝试使用javacv在Java中实现人脸对齐实现C++位,找到here,但我被困在如何通过

在getAffineTransform()中将point2f []作为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中?

感谢您在此导航方面的帮助。

最佳答案

我相信这是答案:https://groups.google.com/d/msg/javacv/dbWTNCHFyeg/Q6k59GPavgsJ:



因此,您的代码应该像这样修改:

Point2f srcTri = new Point2f(3);
Point2f dstTri = new Point2f(3);

// ...

srcTri.position(0).x((float)landmarks[5*2]).y((float)landmarks[5*2+1]);
srcTri.position(1).x((float)landmarks[6*2]).y((float)landmarks[6*2+1]);
srcTri.position(2).x((float)landmarks[0*2]).y((float)landmarks[0*2+1]);
// and do the same for dstTri

warp_mat = getAffineTransform( srcTri.position(0), dstTri.position(0) );

关于java - 在Javacv中将Point2f []作为getAffineTransform()的参数传递,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31184634/

10-13 08:37