gpt4 book ai didi

c++ - 我如何检测网络摄像头并比较本地文件以匹配面部 OpenCV

转载 作者:太空宇宙 更新时间:2023-11-03 22:30:13 25 4
gpt4 key购买 nike

突出显示的代码演示了 openCV 框架已加载到我的 C 代码中,它呈现了 Police watching。这只是为了证明它可以非常流畅地编写代码。

目标:我的网络摄像头已连接到 USB 端口。我想捕获实时网络摄像头图像并从本地文件 (/tmp/myface.png) 匹配,如果实时网络摄像头与本地文件 myface.png 匹配,它将显示文本“Police watching”

我现在如何在以下代码中捕获我的网络摄像头? 2) 当 webCAM 被捕获时,我如何加载文件并查找它是否匹配,匹配时它只显示文本。

#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <fstream>
#include <iostream>
#include <stdio.h>
using namespace std;
using namespace cv;


#include "opencv/cv.h"
void detectAndDisplay(Mat frame);

//*************


// Set Region of Interest
cv::Rect roi_b;
cv::Rect roi_c;

size_t ic = 0; // ic is index of current element
int ac = 0; // ac is area of current element

size_t ib = 0; // ib is index of biggest element
int ab = 0; // ab is area of biggest element
stringstream ssfn;

//*************
CascadeClassifier face_cascade;
string window_name = "Capture - Face detection";
int filenumber; // Number of file to be saved
string filename;
Mat frameread = imread("test.jpg");


int main(int argc, const char *argv[]){
if (argc != 4) {
cout << "usage: " << argv[0] << " </path/to/haar_cascade> </path/to/csv.ext> </path/to/device id>" << endl;
cout << "\t </path/to/haar_cascade> -- Path to the Haar Cascade for face detection." << endl;
cout << "\t </path/to/csv.ext> -- Path to the CSV file with the face database." << endl;
cout << "\t <device id> -- The webcam device id to grab frames from." << endl;
// exit(1);
}
CascadeClassifier face_cascade;
CascadeClassifier face_cascade1;
String fn="C:\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt2.xml";
String fn1="C:\\opencv\\sources\\data\\haarcascades\\haarcascade_eye.xml";

face_cascade.load(fn);
face_cascade1.load(fn1);

VideoCapture input(0);
if(!input.isOpened()){return -1;}

namedWindow("Mezo",1);
Mat f2;
Mat frame;
std::vector<Rect> faces,faces1;

CvCapture* capture1;
IplImage* f1;
Mat crop;
cv::Rect r;
// detectAndDisplay(frameread);
while(1)
{
ic=0;
ib=0;
ab=0;
ac=0;
input >> frame;
waitKey(10);
//cvtColor(frame, frame, CV_BGR2GRAY);
//cv::equalizeHist(frame,frame);
face_cascade.detectMultiScale(frame, faces, 1.1, 10, CV_HAAR_SCALE_IMAGE | CV_HAAR_DO_CANNY_PRUNING, cvSize(0,0), cvSize(300,300));
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);
Mat faceROI = frame(faces[i]);
face_cascade1.detectMultiScale(faceROI, faces1, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30,30));
for(size_t j=0; j< faces1.size(); j++)
{
Point center(faces[i].x+faces1[j].x+faces1[j].width*0.5, faces[i].y+faces1[j].y+faces1[j].height*0.5);
int radius = cvRound((faces1[j].width+faces1[j].height)*0.25);
circle(frame, center, radius, Scalar(255,0,0), 2, 8, 0);
}
rectangle(frame, pt1, pt2, cvScalar(0,255,0), 2, 8, 0);


}
imshow("Result", frame);
waitKey(3);
char c = waitKey(3);
if(c == 27)
break;
}
return 0;
}

最佳答案

你问的可能是人脸识别。你应该更清楚你的问题。

Opencv 有一个类可以完美地进行识别,而不是像你想的那样。

许多方法可用于此技术,Opencv 具有三种算法。您还需要准备图像数据库(标记的面孔)

所有这些步骤都在 opencv 文档中通过一些示例进行了描述:http://docs.opencv.org/modules/contrib/doc/facerec/facerec_tutorial.html只需要阅读并应用即可。

Here您还可以为初学者找到一个很好的教程。

关于c++ - 我如何检测网络摄像头并比较本地文件以匹配面部 OpenCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27522459/

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