使用flandmark(Javacv)显示每个关键点的坐标

使用flandmark(Javacv)显示每个关键点的坐标,java,opencv,javacv,keypoint,Java,Opencv,Javacv,Keypoint,我目前正在使用JavaCV从flandmark使用这个示例。请参阅:。我成功地运行了代码,但是有没有一种方法可以显示面部(眼睛、嘴巴、鼻子)每个关键点的坐标?flandmark库可以检测到大约7/8个关键点。谢谢。您可以在函数detectFaceInImage中找到地标。在同一功能的底部,您将看到如何在人脸上绘制检测到的地标: flandmark_detect(input, bbox, model, landmarks); // display landmarks cvRectangle(or

我目前正在使用JavaCV从flandmark使用这个示例。请参阅:。我成功地运行了代码,但是有没有一种方法可以显示面部(眼睛、嘴巴、鼻子)每个关键点的坐标?flandmark库可以检测到大约7/8个关键点。谢谢。

您可以在函数
detectFaceInImage
中找到地标。在同一功能的底部,您将看到如何在人脸上绘制检测到的地标:

flandmark_detect(input, bbox, model, landmarks);

// display landmarks
cvRectangle(orig, cvPoint(bbox[0], bbox[1]), cvPoint(bbox[2], bbox[3]), CV_RGB(255, 0, 0));
cvRectangle(orig,
cvPoint((int) model.bb().get(0), (int) model.bb().get(1)),
cvPoint((int) model.bb().get(2), (int) model.bb().get(3)), CV_RGB(0, 0, 255));
cvCircle(orig,
cvPoint((int) landmarks[0], (int) landmarks[1]), 3, CV_RGB(0, 0, 255), CV_FILLED, 8, 0);
for (int i = 2; i < 2 * model.data().options().M(); i += 2) {
    cvCircle(orig, cvPoint((int) (landmarks[i]), (int) (landmarks[i + 1])), 3, CV_RGB(255, 0, 0), CV_FILLED, 8, 0);
}
landmarks
是一个
double[]
,按顺序包含地标点的坐标:

index: 0   1   2   3   ...
coord: s0x s0y s1x s1y ...
参考来自

地标总数存储在
model.data().options().M()
中。现在,您已经具备了打印地标坐标的所有基础知识:

for (int i = 0; i < 2 * model.data().options().M(); i += 2) {
    System.out.println("S" + (i/2) + ": (" + (int)(landmarks[i]) + ", " + (int)(landmarks[i+1]) + ")");
}
for(int i=0;i<2*model.data().options().M();i+=2){
System.out.println(“S”+(i/2)+):(“+(int)(地标[i])+”,“+(int)(地标[i+1])+”);
}
for (int i = 0; i < 2 * model.data().options().M(); i += 2) {
    System.out.println("S" + (i/2) + ": (" + (int)(landmarks[i]) + ", " + (int)(landmarks[i+1]) + ")");
}