Я OpenCV и C ++ новичок. У меня проблема с моим студенческим проектом. Мой репетитор хочет взять кадры с камеры и сохранить полученные кадры в jpg. Итак, сначала я использовал "cvCreateCameraCapture,cvQueryFrame,cvSaveImage"
, и все было в порядке. Но кадр относительно большой, около 2500x2000, и для сохранения одного кадра требуется около 1 секунды. Но моему репетитору требуется, по крайней мере, сохранять 10 кадров в секунду.
Затем у меня появились идеи сначала сохранить исходные данные, и после процесса захвата я могу сохранить их в Jpg. Поэтому я написал следующий тестовый код. Но проблема в том, что все сохраненные изображения одинаковы, и кажется, что они просто взяты из данных последнего захваченного фрейма. Я думаю, проблема в моих плохих знаниях c ++, особенно указателей. очень надеюсь получить помощь здесь.
Заранее спасибо!
void COpenCVDuoArryTestDlg::OnBnClickedButton1()
{
IplImage* m_Frame=NULL;
TRACE("m_Frame initialed");
CvCapture * m_Video=NULL;
m_Video=cvCreateCameraCapture(0);
IplImage**Temp_Frame= (IplImage**)new IplImage*[100];
for(int j=0;j<100;j++){
Temp_Frame[j]= new IplImage [112];
}
TRACE("Tempt_Frame initialed\n");
cvNamedWindow("video",1);
int t=0;
while(m_Frame=cvQueryFrame(m_Video)){
for(int k=0;k<m_Frame->nSize;k++){
Temp_Frame[t][k]= m_Frame[k];
}
cvWaitKey(30);
t++;
if(t==100){
break;
}
}
for(int i=0;i<30;i++){
CString ImagesName;
ImagesName.Format(_T("Image%.3d.jpg"),i);
if(cvWaitKey(20)==27) {
break;
}
else{
cvSaveImage(ImagesName, Temp_Frame[i]);
}
}
cvReleaseCapture(&m_Video);
cvDestroyWindow("video");
TRACE("cvDestroy works\n");
delete []Temp_Frame;
}