Если вам нужен код ссылки, проверьте это и это , чтобы начать работу.
В любом случае , приведенный ниже код отображает видео с веб-камеры. Если вы посмотрите поближе, вы увидите, что происходит преобразование цветной рамки в версию в оттенках серого, и в окне отображается шкала серого.
Кадр в градациях серого также записывается в файл на диске с именем out.avi . Вы должны знать, что этот код не будет работать в Mac OS X с OpenCV 2.1 просто потому, что OpenCV необходимо скомпилировать с помощью ffmpeg, чтобы разрешить присоединение видео в файл.
В Windows cvCreateVideoWriter () отобразит диалоговое окно для выбора подходящего кодека, который вы хотите использовать при сохранении видео. Можно изменить этот вызов функции, установив параметр, который будет жестко задавать кодек по вашему усмотрению.
Я написал это в спешке, но я знаю, что это работает.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cv.h>
#include <highgui.h>
#include <cxtypes.h>
#include <cvaux.h>
int main()
{
int camera_index = 0;
IplImage *color_frame = NULL;
int exit_key_press = 0;
CvCapture *capture = NULL;
capture = cvCaptureFromCAM(camera_index);
if (!capture)
{
printf("!!! ERROR: cvCaptureFromCAM\n");
return -1;
}
double cam_w = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);
double cam_h = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);
double fps = cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
printf("* Capture properties: %f x %f - %f fps\n", cam_w, cam_h, fps);
cvNamedWindow("Grayscale video", CV_WINDOW_AUTOSIZE);
CvVideoWriter* writer = NULL;
writer = cvCreateVideoWriter("out.avi", -1, fps, cvSize((int)cam_w,(int)cam_h), 1);
if (writer == NULL)
{
printf("!!! ERROR: cvCreateVideoWriter\n");
return -1;
}
while (exit_key_press != 'q')
{
color_frame = cvQueryFrame(capture);
if (color_frame == NULL)
{
printf("!!! ERROR: cvQueryFrame\n");
break;
}
IplImage* gray_frame = cvCreateImage(cvSize(color_frame->width, color_frame->height), color_frame->depth, 1);
if (gray_frame == NULL)
{
printf("!!! ERROR: cvCreateImage\n");
continue;
}
cvCvtColor(color_frame, gray_frame, CV_BGR2GRAY);
cvShowImage("Grayscale video", gray_frame);
cvWriteFrame(writer, gray_frame);
cvReleaseImage(&gray_frame);
exit_key_press = cvWaitKey(1);
}
cvReleaseVideoWriter(&writer);
cvDestroyWindow("Grayscale video");
cvReleaseCapture(&capture);
return 0;
}