如何从相机获取多个帧?
-
12-11-2019 - |
题
我正在尝试在相机捕获的面孔上实施面部识别。为了制作面部数据集,我需要存储单个人的多个图像。因为我需要从相机获取多个帧并保存它们。
#include"cv.h"
#include"highgui.h"
#include <iostream>
using namespace cv;
// Grab the next camera frame. Waits until the next frame is ready, and
// provides direct access to it, so do NOT modify or free the returned image!
// Will automatically initialize the camera on the first frame.
#include"highgui.h"
#include<iostream>
using namespace cv;
IplImage* getCameraFrame(CvCapture* &camera);
int main()
{
CvCapture* camera = 0; // The camera device.
while ( cvWaitKey(10) != 27 )
{ // Quit on "Escape" key.
IplImage *frame = getCameraFrame(camera);
cvSaveImage("Frame:",frame);
}
return 0;
}
IplImage* getCameraFrame(CvCapture* &camera)
{
IplImage *frame;
int w, h;
// If the camera hasn't been initialized, then open it.
if (!camera) {
printf("Acessing the camera ...\n");
camera = cvCreateCameraCapture( 0 );
if (!camera) {
printf("Couldn't access the camera.\n");
exit(1);
}
// Try to set the camera resolution to 320 x 240.
cvSetCaptureProperty(camera, CV_CAP_PROP_FRAME_WIDTH, 320);
cvSetCaptureProperty(camera, CV_CAP_PROP_FRAME_HEIGHT, 240);
// Get the first frame, to make sure the camera is initialized.
frame = cvQueryFrame( camera );
if (frame) {
w = frame->width;
h = frame->height;
printf("Got the camera at %dx%d resolution.\n", w, h);
}
// Wait a little, so that the camera can auto-adjust its brightness.
Sleep(1000); // (in milliseconds)
}
// Wait until the next camera frame is ready, then grab it.
frame = cvQueryFrame( camera );
if (!frame) {
printf("Couldn't grab a camera frame.\n");
exit(1);
}
return frame;
}
.
但在cvsavemage中,我需要为要保存的图像提供名称。姓名应该是唯一的,否则仅在1Image上覆盖多个帧。 如何解决这个问题?
解决方案
您可以使用整数变量进行计数序列
int counter = 0;
char *filename = "Photo"
while ( cvWaitKey(10) != 27 )
{ // Quit on "Escape" key.
IplImage *frame = getCameraFrame(camera);
counter++;
filename = getNextName(counter);
cvSaveImage(filename ,frame);
}
.
在getNextName()
函数中,您可以执行整数转换和字符串Concat .jpg
char* getNextName(int counter)
{
char buf[5];
char *filename = "Photo";
// convert 123 to string [buf]
itoa(counter, buf, 10); // int to char
strcat(filename, buf); // concat "Photo" + "1" = "Photo1"
strcat(filename, ".jpg"); // concat "Photo1" + ".jpg" = "Photo1.jpg"
return filename;
}
.
它将使用具有编号序列的新名称自动保存图像。
其他提示
您可以简单地使用ffmpeg。 以下代码将将视频转到X图像
ffmpeg -i video.mpg image%d.jpg
. 不隶属于 StackOverflow