0
我正在使用C与OpenCV进行“照片”处理应用程序。 我的电脑将使用其 网络摄像头不断调查周围环境。当它检测到移动时,它会将当前的 网络摄像头图像写入文件(通知)。 这是我编写代码的方式,但速度非常慢,我不擅长通知....你能给我一些关于代码的好建议吗?入侵者检测器 - OpenCv - C
#include <stdio.h>
#include "cv.h"
#include "highgui.h"
#include <dos.h>
#include <conio.h>
CvCapture *capture;
int key;
IplImage *oldFrame;
IplImage *currentFrame;
IplImage *res;
int f=0,x,y,idx,idy;
int currentFrame_width, currentFrame_height;
int oldFrame_width, oldFrame_height;
int res_width, res_height;
int main(int argc, char** argv)
{
while(key != 'q')
{
capture = cvCaptureFromCAM(0);
if(!capture) return 1;
key = cvWaitKey(1);
cvNamedWindow("FrameController", CV_WINDOW_AUTOSIZE);
if(f==0){
oldFrame = cvQueryFrame(capture);
cvShowImage("FrameController", oldFrame);
f=1;
}
else{
CvMemStorage* storage = cvCreateMemStorage(0);
currentFrame = cvQueryFrame(capture);
for (x=0;x<currentFrame->width;x++)
{
for (y=0;y<currentFrame->height;y++)
{
idx = y*currentFrame->widthStep + currentFrame->nChannels*x;
idy = y*oldFrame->widthStep + oldFrame->nChannels*x;
}
}
uchar R= (uchar) currentFrame->imageData [idx+0];
uchar G = (uchar) currentFrame->imageData [idx+1];
uchar B = (uchar) currentFrame->imageData [idx+2];
uchar R1= (uchar) oldFrame->imageData [idy+0];
uchar G1 = (uchar) oldFrame->imageData [idy+1];
uchar B1 = (uchar) oldFrame->imageData [idy+2];
if(!((R==R1) || (G==G1) || (B==B1))){
f=0;
CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad("C:\\OpenCV2.1\\data\\haarcascades\\haarcascade_frontalface_alt2.xml");
double scale = 1.3;
static CvScalar colors[] = {CV_RGB(rand()&255, rand()&255, rand()&255)};
cvClearMemStorage(storage);
CvSeq* objects = cvHaarDetectObjects(currentFrame, cascade, storage, 1.1, 4, 0, cvSize(40, 50));
CvRect* r;
for(int i = 0; i < (objects ? objects->total : 0); i++){
r = (CvRect*)cvGetSeqElem(objects, i);
cvRectangle(currentFrame, cvPoint(r->x, r->y), cvPoint(r->x + r->width, r->y + r->height),
colors[i%8]);
cvShowImage("FrameController", currentFrame);
}
}
}
}
cvDestroyWindow("FrameController");
cvReleaseCapture(&capture);
cvReleaseImage(¤tFrame);
cvReleaseImage(&oldFrame);
return 0;
}
既然你的代码有效,你应该在http://codereview.stackexchange.com上发布。 – Joe
第一次迭代时'key'会有什么价值?将会创建多少次“FrameController”窗口? – HonkyTonk