我正在尝试使用opencv和openkinect库构建一个面部检测。对于图像输入我想使用xbox kinect v2。我将我的代码基于opencv库中的面部检测示例。我正在使用Mac。
到目前为止,这是我的代码:
import gab.opencv.*;
import java.awt.Rectangle;
/* KINECT */
import org.openkinect.freenect.*;
import org.openkinect.freenect2.*;
import org.openkinect.processing.*;
OpenCV opencv;
Kinect2 kinect2;
Rectangle[] faces;
void setup() {
opencv = new OpenCV(this, 640/2, 480/2);
size(640, 480);
// Kinectv2
kinect2 = new Kinect2(this);
kinect2.initVideo();
kinect2.initDevice();
opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE);
faces = opencv.detect();
}
void draw() {
opencv.loadImage(kinect2.getVideoImage());
image(kinect2.getVideoImage(), 0, 0, 640, 480);
noFill();
stroke(0, 255, 0);
strokeWeight(3);
for (int i = 0; i < faces.length; i++) {
rect(faces[i].x, faces[i].y, faces[i].width, faces[i].height);
}
}
问题似乎在“opencv.loadImage(kinect2.getVideoImage());”中。因为检测不起作用。 当使用isight相机(使用内置功能“capture”和“video”-add-on)而不是kinect时,一切都运行得很好。
任何人都可以帮忙吗?
答案 0 :(得分:1)
将来,请尝试提供MCVE。这意味着从空白草图开始,只添加足够的代码,以便我们可以看到问题。在您的情况下,我们不需要查看任何kinect代码。只需加载硬编码图像并将其传递给OpenCV。
这是一个示例草图。我从human Wikipedia page获得了图片网址。
import gab.opencv.*;
import java.awt.Rectangle;
PImage image;
OpenCV opencv;
void setup() {
size(500, 500);
image = loadImage("https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/A_young_Man_and_Lady.png/800px-A_young_Man_and_Lady.png");
image.resize(width, height);
opencv = new OpenCV(this, width, height);
opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE);
}
void draw() {
image(image, 0, 0);
opencv.loadImage(image);
Rectangle[] faces = opencv.detect();
noFill();
stroke(255, 0, 0);
strokeWeight(3);
for (Rectangle face : faces) {
rect(face.x, face.y, face.width, face.height);
}
}
请注意,我每帧调用opencv.detect()
函数 。您只能从setup()
调用它,这意味着您只在第一帧中检测到面孔。
如果仍然无法使其正常工作,那么您将不得不进行一些调试。尝试尽可能地隔离您的问题。摆脱kinect代码,只使用硬编码图像。拍摄通过kinect获取的图像的屏幕截图,并使用它而不是直播。以较小的步骤工作,这样你就可以在遇到问题时发布一个更具体的问题(一般情况下很难提供帮助&#34;这不是工作问题&#34;问题 - 它&#39; s更容易帮助特定&#34;我试过X,期望Y,但得到Z而不是#34;键入问题)。祝你好运。