当前位置 博文首页 > C++版本_cumtchw:opencv4从avi视频中提取图片/opencv4从摄像头
目录
1.从视频提取图像
2.从摄像头提取图像
3.之前的opencv2老代码
opencv4使用如下代码读取视频数据:
cv::VideoCapture cap;
cap.open(video_name);
cv::Mat frame;
cap >> frame;//读取方式1
cap.read(frame); //读取方式2
int video_fps = cap.get(CAP_PROP_FPS); //获取帧率
int width = cap.get(CAP_PROP_FRAME_WIDTH);
int height = cap.get(CAP_PROP_FRAME_HEIGHT);
//cv::VideoCapture::get(CAP_PROP_FPS)获取帧率
另外,makefile中需要链接的库有opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs opencv_video opencv_videoio,最开始没有加libopencv_videoio.so,报错undefined reference to `cv::VideoCapture::VideoCapture()',加上opencv_videoio之后就好了,
opencv4用下面代码从摄像头抓取图像
VideoCapture capture(0);//打开摄像头,获取图像。
while (capture.isOpened())
{
Mat frame;
capture >> frame;
}
?opencv4不要用以下代码,opencv4中已经没有IplImage这种了,而且cvCaptureFromAVI也会提示没有声明。
//初始化一个视频文件捕捉器
CvCapture* capture = cvCaptureFromAVI(filename);
//获取视频信息
cvQueryFrame(capture);
frameH = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);
frameW = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);
fps = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
numFrames = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);
while(1)
{
IplImage *frame = cvQueryFrame(capture); //获取一帧图片
if(i >=numFrames || i >= NUM_FRAME ) break;
//这里判断视频文件是否读完,除了用帧数判断外,也可以直接用下面这行代码判断。
// if(!frame) break ;
}
另外,将imlimage转换为Mat
Mat::Mat(const IplImage* img, bool copyData=false);
?
?
参考文献:
opencv3 opencv4读取视频并保存为视频以及图片? ??https://blog.csdn.net/mao_hui_fei/article/details/79969020
【OpenCV3】视频读写——cv::VideoCapture和cv::VideoWriter详解? ??https://blog.csdn.net/guduruyu/article/details/68486063
OpenCV读取视频、OpenCV提取视频每一帧、每一帧图片合成新的AVI视频??https://www.cnblogs.com/gune/articles/3374651.html
OPENCV读取AVI视频失败 视频帧提取以及图片合成视频? ??https://www.cnblogs.com/xubenben/archive/2012/12/01/2797689.html
?
cs