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读取视频保存成图片并对图片进行部分截取的主要内容,如果未能解决你的问题,请参考以下文章

opencv3读取视频并保存为图片

Opencv:按帧数读取视频并保存图片

OpenCV视频读取播放,视频转换为图片

用 opencv和numpy进行图片和字符串互转,并保存至 json

openCV第一篇

关于opencv读取图片、视频总是窗口一闪不出图、视频的问题