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