我目前正在使用来自使用 JavaCV 的 flandmark 中的这个示例。参考:https ://github.com/bytedeco/javacv-examples/blob/master/flandmark-demo/src/main/java/flandmark/Example1.java 。我设法运行了代码,但是有没有一种方法可以显示面部(眼睛、嘴巴、鼻子)中每个关键点的坐标?flandmark 库可以检测到大约 7/8 个关键点。谢谢。
1 回答
1
您会在 function 中找到地标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);
}
bbox
是一个int[]
包含人脸边界框的坐标为:
int[0] -> top left x
int[1] -> top left y
int[2] -> bottom right x
int[3] -> bottom right y
landmarks
是 a double[]
,依次包含地标点的坐标:
index: 0 1 2 3 ...
coord: s0x s0y s1x s1y ...
参考来自flandmark 主页的图片
地标的总数存储在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]) + ")");
}
于 2015-08-16T13:04:32.770 回答