Hey I have been struggling getting this sample code to work:
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <stdio.h>
using namespace std;
using namespace cv;
int main(int argc, const char** argv)
{
//create the cascade classifier object used for the face detection
CascadeClassifier face_cascade;
//use the haarcascade_frontalface_alt.xml library
face_cascade.load("../opencv/data/haarcascades/haarcascade_frontalface_alt.xml");
//setup video capture device and link it to the first capture device
VideoCapture captureDevice;
captureDevice.open(0);
//setup image files used in the capture process
Mat captureFrame;
Mat grayscaleFrame;
//create a window to present the results
namedWindow("outputCapture", 1);
//create a loop to capture and find faces
while(true)
{
//capture a new image frame
captureDevice>>captureFrame;
//convert captured image to gray scale and equalize
cvtColor(captureFrame, grayscaleFrame, CV_BGR2GRAY);
equalizeHist(grayscaleFrame, grayscaleFrame);
//create a vector array to store the face found
std::vector<Rect> faces;
//find faces and store them in the vector array
face_cascade.detectMultiScale(grayscaleFrame, faces, 1.1, 3, CV_HAAR_FIND_BIGGEST_OBJECT|CV_HAAR_SCALE_IMAGE, Size(30,30));
//draw a rectangle for all found faces in the vector array on the original image
for(int i = 0; i < faces.size(); i++)
{
Point pt1(faces[i].x + faces[i].width, faces[i].y + faces[i].height);
Point pt2(faces[i].x, faces[i].y);
rectangle(captureFrame, pt1, pt2, cvScalar(0, 255, 0, 0), 1, 8, 0);
}
//print the output
imshow("outputCapture", captureFrame);
//pause for 33ms
waitKey(33);
}
return 0;
}
And it finally is getting input from my camera, but now 95% of the image appears as green and I have no clue why:
If I move my hand I can see it update the frames as it should in the top part of the screen (those are my fingers so I know it is in fact getting images from the camera), just no idea why it's all green.
One thing I do notice is that if I set the video mode to MJPG at 10fps and then run the sample code, it resets it to YUYV at 30fps after running it. So maybe this is part of the problem because the fps is too high for it to handle? Just an idea.
UPDATE: After changing the fps settings in the code it now shows the image but is incredibly slow. I am trying to set the frame size to be lower to reduce overloading the processor:
captureDevice.set(CV_CAP_PROP_FPS, 5);
captureDevice.set(CV_CAP_PROP_FRAME_WIDTH, 320);
captureDevice.set(CV_CAP_PROP_FRAME_HEIGHT, 240);
but this isn't working, the screen resolution stays the same. It looks like this bug was never resolved: http://code.opencv.org/issues/142