C++ opencv读取视频保存成图片并对图片进行部分截取
Posted 王往旺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ opencv读取视频保存成图片并对图片进行部分截取相关的知识,希望对你有一定的参考价值。
#include<opencv2\\core\\core.hpp>
#include<opencv2\\highgui\\highgui.hpp>
#include<opencv2\\imgproc\\imgproc.hpp>
using namespace cv;
#include<iostream>
#include<vector>
using namespace std;
bool drawing_box = false;
bool gotBox = false;
Rect box;
Point downPoint;
Point destination;
void mouseRectHandler(int event, int x, int y, int flags, void* param)
switch (event)
case EVENT_MOUSEMOVE:
if (drawing_box)
if (x >= downPoint.x && y >= downPoint.y)
box.x = downPoint.x;
box.y = downPoint.y;
box.width = x - downPoint.x;
box.height = y - downPoint.y;
if (x >= downPoint.x && y <= downPoint.y)
box.x = downPoint.x;
box.y = y;
box.width = x - downPoint.x;
box.height = downPoint.y - y;
if (x <= downPoint.x && y <= downPoint.y)
box.x = x;
box.y = y;
box.width = downPoint.x - x;
box.height = downPoint.y - y;
if (x <= downPoint.x && y >= downPoint.y)
box.x = x;
box.y = downPoint.y;
box.width = downPoint.x - x;
box.height = y - downPoint.y;
break;
case EVENT_LBUTTONDOWN:
drawing_box = true;
downPoint = Point(x, y);
cout << "起点: " << downPoint << endl;
break;
case EVENT_LBUTTONUP:
drawing_box = false;
destination = downPoint = Point(x, y);
cout << "终点: " << destination << endl;
gotBox = true;
break;
default:
break;
void demo9()
VideoCapture video("D:\\\\data\\\\test.mp4");
//VideoCapture video(0);
video.set(CAP_PROP_FRAME_WIDTH, 1920);
video.set(CAP_PROP_FRAME_HEIGHT, 1080);
if (!video.isOpened())
cout << "加载视频失败,请检查文件路径设置!" << endl;
return;
long totalFrameNumber = video.get(CAP_PROP_FRAME_COUNT);
bool flags = true;
long currentFrame = 0;
Mat frame;
namedWindow("video", 1);
setMouseCallback("video", mouseRectHandler, NULL);
for (;;)
video >> frame;
if (!frame.data)
break;
rectangle(frame, box, Scalar(255, 255, 0), 2);
imshow("video", frame);
if (gotBox)
break;
if (waitKey(50) == 'q')
break;
//setMouseCallback("video", NULL, NULL);
for (;;)
video >> frame;
if (!frame.data)
break;
rectangle(frame, box, Scalar(0, 255, 0), 2);
imshow("video", frame);
if (waitKey(30) == 'q')
break;
stringstream str;
str << currentFrame << ".jpg";
cout << "正在处理第" << currentFrame << "帧" << endl;
printf("\\n");
if (currentFrame % 20 == 0)
frame= frame(box);
imwrite("D:\\\\data\\\\img\\\\zhen\\\\" + str.str(),frame);
if (currentFrame >= totalFrameNumber)
flags = false;
currentFrame++;
video.release();
在opencv下读取视频保存为图片
VideoCapture capture;
capture.open("D:\\car.avi");//读取视频
对于视频下一帧的读取:
capture>>frameImg;//读取视频流下一帧控制,字符重载
对于视频的图片保存
std::stringstream ss;//存储图片路径保存信息
ss<<"D:/output/image_"<<setfill(‘0‘)<<setw(3)<<(nCount-1)<<".jpg";//设置路径信息及图片名
cv::imwrite(ss.str(),frameImg);//将视频帧保存在指定路径下
以上是关于C++ opencv读取视频保存成图片并对图片进行部分截取的主要内容,如果未能解决你的问题,请参考以下文章