gpt4 book ai didi

c++ - opencv 和 c++ 中的代码未检测到嘴巴

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:46 26 4
gpt4 key购买 nike

我正在使用 C++ 和 opencv。我正在使用这篇文章中的代码 OpenCv assertion failed ,即,有答案。但是,我通过将 mouthROI.width 和 mouthROI.height 除以 5 来稍微更改代码。代码在本应检测到嘴巴时在眼睛区域附近显示一个红色矩形。有谁知道代码有什么问题吗?谢谢

最佳答案

我从您的代码中了解到,您的 pt1 和 pt2 在口部检测中未正确初始化。

他们必须是

Point pt1(faces[i].x + mouths[i].x, faces[i].y + mouths[i].y);
Point pt2(pt1.x + mouths[i].width, pt1.y + mouths[i].height);

此外,我不知道你的代码要用在哪里,但是,它看起来太长了,只是脸和嘴巴,我指的是你在之前的问题中分享的代码。以防万一,如果您还没有得到输出,请告诉我,我可以免费分享我关于这件事的旧代码片段。

它给了我结果。不要忘记将 xml 文件添加到项目目录中。

#include "stdafx.h"
#include "opencv2\highgui\highgui.hpp"
#include "opencv2\objdetect\objdetect.hpp"
#include "opencv2\imgproc\imgproc.hpp"

using namespace cv;

int main(int argc, const char** argv)
{
VideoCapture cap(0);
CascadeClassifier face, mouth;
face.load("haarcascade_frontalface_default.xml");
mouth.load("haarcascade_mcs_mouth.xml");
Mat frame, grayframe, testframe;

while(1)
{
cap.read(frame);
if(!cap.read(frame))
{
printf("an error while taking the frame from cap");
}
vector< Rect > faces;
cvtColor(frame,grayframe, CV_BGR2GRAY);
equalizeHist(grayframe,testframe);
face.detectMultiScale(testframe, faces,1.1,3, CV_HAAR_SCALE_IMAGE,Size(30,30));
for(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);
vector <Rect> mouthi;
mouth.detectMultiScale(face,mouthi);
for(int k=0;k<mouthi.size();k++)
{
Point pt1(mouthi[0].x+faces[i].x , mouthi[0].y+faces[i].y);
Point pt2(pt1.x+mouthi[0].width, pt1.y+mouthi[0].height);
rectangle(frame, pt1,pt2,Scalar(255,0,0),1,8,0);
}

}

imshow("output", frame);
waitKey(33);
}
return 0;

}

关于c++ - opencv 和 c++ 中的代码未检测到嘴巴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21980690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com