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

OpenCV how can i detect webcam and compare the local file to match face

本文关键字:比较 文件 面部 摄像头 何检测 检测 网络 OpenCV      更新时间:2023-10-16

突出显示的代码表明openCV框架已加载到我的C代码中,并且它呈现了警察监视。这只是为了证明它非常流畅且

编写的代码非常干净。

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

我要解决的问题:1)我现在如何在以下代码上捕获我的网络CAM?2)捕获webCAM时,如何加载文件并查找它是否匹配,匹配时仅显示该文本。

#include "cv.h"
#include "highgui.h"
int main() 
{
    CvPoint pt   = cvPoint( 620/4, 440/2 ); // width, height
    IplImage* hw = cvCreateImage(cvSize(620, 440), 8,3);  // width, height             
    CvFont font; // cvSet(hw,cvScalar(0,0,0)); // optional
    cvInitFont (&font, CV_FONT_HERSHEY_COMPLEX, 1.0, 1.0, 0, 1, CV_AA);
    cvPutText  (hw, "Police watching", pt, &font, CV_RGB(150, 0, 150));        
    cvShowImage("Police watching", hw);     //cvNamedWindow("Police watching", 0); // optional
    cvWaitKey  (0);
}

注意:当这个模型工作时,我将练习这个模型以转换为JNI java模型。

捕获视频帧很简单,只需按照此示例操作即可。关键的部分是:

IplImage *img = cvLoadImage( argv[1], CV_LOAD_IMAGE_COLOR );
CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY );
while ( 1 ) {
    IplImage* frame = cvQueryFrame( capture );
    //match(img,frame);
}
cvReleaseCapture( &capture );

第二部分可能要困难得多,取决于您到底想做什么。如果你想简单地比较图像,你可以使用cvNorm。如果你想要人脸检测或人脸识别,你真的需要知道你在做什么。

这就是我获得网络摄像头提要的方式...(代码是用Python编写的,但很容易翻译)

# create capture device
device = 0 # assume we want first device
capture = cv.CreateCameraCapture(0)
cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH, 640)
cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT, 480)    
# check if capture device is OK
if not capture:
    print "Error opening capture device"
    sys.exit(1)
# capture the current frame
frame = cv.QueryFrame(capture)
if frame is None:
    break
    # mirror
cv.Flip(frame, None, 1)   
#Do face detection here

我认为您将很难尝试将单个文件中的人脸与实时视频流匹配。 查看cv.HaarDetectObjects以获取一些很酷的特征检测算法。