Ich versuche, den Mund in einem Bild mit OpenCV zu erfassen, so dass ich mit dem folgenden Code:Erkennen Mund mit OpenCV
#include "face_detection.h"
using namespace cv;
// Function detectAndDisplay
void detectAndDisplay(const std::string& file_name, cv::CascadeClassifier& face_cascade, cv::CascadeClassifier& mouth_cascade)
{
Mat frame = imread(file_name);
std::vector<Rect> faces;
Mat frame_gray;
Mat crop;
Mat res;
Mat gray;
cvtColor(frame, frame_gray, COLOR_BGR2GRAY);
equalizeHist(frame_gray, frame_gray);
// Detect faces
face_cascade.detectMultiScale(frame_gray, faces, 1.1, 3, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));
for(unsigned int i=0;i<faces.size();i++)
{
rectangle(frame,faces[i],Scalar(255,0,0),1,8,0);
Mat face = frame(faces[i]);
cvtColor(face,face,CV_BGR2GRAY);
std::vector <Rect> mouthi;
mouth_cascade.detectMultiScale(face, mouthi);
for(unsigned int k=0;k<mouthi.size();k++)
{
Point pt1(mouthi[k].x+faces[i].x , mouthi[k].y+faces[i].y);
Point pt2(pt1.x+mouthi[k].width, pt1.y+mouthi[k].height);
rectangle(frame, pt1,pt2,Scalar(0,255,0),1,8,0);
}
}
imshow("Frame", frame);
waitKey(33);
}
Die Klassifizierer sind haarcascade_frontalface_alt.xml
und haarcascade_mcs_mouth.xml
.
Das Gesicht ist richtig erkannt, aber der Mund ist nicht: Ich bekomme auch die Augen und einige andere Teile, wie die Stirn. Gibt es eine Möglichkeit, nur den Mund zu erkennen?
Hey, kann ich einen Link zu dem Datensatz bekommen, von dem Sie diese Bilder bekommen haben? Ich habe die Bilder bei mir, aber ich kann den Link zu der Seite nicht finden. Ich muss für Zitate. Vielen Dank! –
@AninditKarmakar Hallo, es ist der KDEF-Datensatz: http://www.emotionlab.se/resources/kdef – minomic
@minomic Können Sie auf das Thema schauen: http://stackoverflow.com/questions/37921913/java-and- Haarkascade-Gesicht-und-Mund-Erkennung-Mund-als-die-Nase – Adamo