一、概述
在视觉中通常需要对图片及视频等素材进行采集,为此准备下面的两个代码作为常用小代码工具。
二、OpenCV图片拍照方法
#include <iostream>
#include <string>
#include <sstream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, const char** argv) //程序主函数
{
VideoCapture cap(0); //设置打开摄像头的ID
cap.set(CV_CAP_PROP_FRAME_WIDTH, 1280); //设置捕获视频的宽度
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 720); //设置捕获视频的高度
if (!cap.isOpened()) //判断是否成功打开相机
{
return -1;
}
Mat frame;
cap >> frame; //从相机捕获一帧图像
char key;
char pic_name[40];
int ROI_Count=1;
while (1)
{
cap >> frame; //从相机捕获一帧图像
imshow("Video", frame);
key=cvWaitKey(33);
if(key==32) //the Ascii of "Space key" is 32
{
sprintf(pic_name,"../pic_saved/pic_%d.bmp",ROI_Count);
cv::imwrite(pic_name,frame);
ROI_Count++;
}
}
return 0;
}
三、opencv视频保存方法
#include <iostream>
#include <string>
#include <sstream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, const char** argv) //程序主函数
{
VideoCapture cap(0); //设置打开摄像头的ID
cap.set(CV_CAP_PROP_FRAME_WIDTH, 1280); //设置捕获视频的宽度
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 720); //设置捕获视频的高度
if (!cap.isOpened()) //判断是否成功打开相机
{
return -1;
}
int vedio_width = cap.get(CV_CAP_PROP_FRAME_WIDTH); //获取图像的宽度
int vedio_height = cap.get(CV_CAP_PROP_FRAME_HEIGHT); //获取图像的高度
VideoWriter vedio("../vedio_out.avi", CV_FOURCC('M','P','4','2'),25,Size(vedio_width,vedio_height));
Mat frame;
while (1)
{
cap >> frame; //从相机捕获一帧图像
if(frame.empty()==true)
break;
imshow("Video_out", frame);
vedio << frame; //写入一帧视频
if(waitKey(25)==27) //the Ascii of "ESC key" is 27
{
break;
}
}
return 0;
}
- 其中,对VideoWriter 函数进行如下说明:
- 该函数的常用构造函数如下:
VideoWriter(const string& filename, int fourcc, double fps,Size frameSize, bool isColor=true);
- 第一个参数为存储是视频名称(包含路径)
- 第二个参数fourcc 为视频编码方式, 表示用于压缩帧的4字符编解码器代码;常见的编码方式如下:
- CV_FOURCC(‘P’,‘I’,‘M’,‘1’) = MPEG-1 codec
CV_FOURCC(‘M’,‘J’,‘P’,‘G’) = motion-jpeg codec
CV_FOURCC(‘M’, ‘P’, ‘4’, ‘2’) = MPEG-4.2 codec
CV_FOURCC(‘D’, ‘I’, ‘V’, ‘3’) = MPEG-4.3 codec
CV_FOURCC(‘D’, ‘I’, ‘V’, ‘X’) = MPEG-4 codec
CV_FOURCC(‘U’, ‘2’, ‘6’, ‘3’) = H263 codec
CV_FOURCC(‘I’, ‘2’, ‘6’, ‘3’) = H263I codec
CV_FOURCC(‘F’, ‘L’, ‘V’, ‘1’) = FLV1 codec - 如果将其设置为-1,则在函数运行是会弹出对话框提示进行选择
- 生成文件占用空间最小的编码方式是MPEG-4.2 codec,对应参数为:CV_FOURCC(‘M’, ‘P’, ‘4’, ‘2’)
- 最大的是MPEG-1 codec,对应参数为CV_FOURCC(‘P’,‘I’,‘M’,‘1’) ,所占磁盘空间是前者的5.7倍
- CV_FOURCC(‘P’,‘I’,‘M’,‘1’) = MPEG-1 codec
- fps :创建的视频流的帧速率
- frameSize : 视频帧的大小尺寸
- isColor : 如果它不为零,编码器将期望并编码彩色帧,否则它将与灰度帧一起使用(该标志目前仅在Windows上受支持)。
四、参考资料
版权声明:本文为yph001原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。