突出显示的代码表明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以获取一些很酷的特征检测算法。