本文主要是介绍opencv4从avi视频中提取图片/opencv4从摄像头抓取图像_C++版本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
1.从视频提取图像
2.从摄像头提取图像
3.之前的opencv2老代码
1.从视频提取图像
opencv4使用如下代码读取视频数据:
cv::VideoCapture cap;
cap.open(video_name);cv::Mat frame;
cap >> frame;//读取方式1
cap.read(frame); //读取方式2int 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之后就好了,
2.从摄像头提取图像
opencv4用下面代码从摄像头抓取图像
VideoCapture capture(0);//打开摄像头,获取图像。
while (capture.isOpened())
{Mat frame;capture >> frame;
}
3.之前的opencv2老代码
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
这篇关于opencv4从avi视频中提取图片/opencv4从摄像头抓取图像_C++版本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!