#include <opencv2/imgproc.hpp>

#include <opencv2/highgui.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <iostream>

#include<time.h>

#include<conio.h>

 

using namespace cv;

using namespace std;

 

 

void put_string(Mat& frame, string text, Point pt)

{

    Point shade = pt + Point(2, 2);

    int font = FONT_HERSHEY_SIMPLEX;

    putText(frame, text, shade,font, 0.7, Scalar(0, 0, 0), 2);        // 그림자 효과

    putText(frame, text, pt, font, 0.7, Scalar(120, 200, 90), 2);   // 작성 문자

}

 

void put_circle(Mat& frame)

{

    int font = FONT_HERSHEY_SIMPLEX;

    circle(frame, Point(15, 240), 7, Scalar(0, 0, 255),-1);

}

 

int main(int argc, char** argv)

{

    

    VideoCapture capture;

    capture.open("video.mp4"); // 동영상 파일 개방

    CV_Assert(capture.isOpened());

    double frame_rate = capture.get(CAP_PROP_FPS); // 초당 프레임 수

    int delay = 1000 / frame_rate;        // 지연시간

    int frame_cnt = 0;

    Mat frame;

    time_t now;

    bool save_on = false;

    bool capture_on = false;

    bool stop_on = false;

    int key;

    int i = 0;

 

 

    Size size = Size((int)capture.get(CAP_PROP_FRAME_WIDTH), (int)capture.get(CAP_PROP_FRAME_HEIGHT));

    int fourcc = VideoWriter::fourcc('D', 'X', '5', '0');   // 압축 코덱 설정

 

    capture.set(CAP_PROP_FRAME_WIDTH, size.width);

    capture.set(CAP_PROP_FRAME_HEIGHT, size.height);

 

    VideoWriter writer; // 동영상 파일 저장 객체

    writer.open("video_file.avi", fourcc, CAP_PROP_FPS, size);

    CV_Assert(writer.isOpened());

 

 

 

 

    while (capture.read(frame)) // 프레임 반복 재생

    {

        now = time(NULL);

 

        key=waitKey(delay);        // 프레임간 지연시간 지정

 

        if (key == 'e')

        {

            save_on = true;

            stop_on = false;

            capture_on = false;

        }

        else if (key == 's')

        {

            save_on = false;

            stop_on = true;

            capture_on = false;

        }

        else if (key == 'c')

        {

            i++;

            string str = "capture" + to_string(i) + ".jpg";

            imwrite(str, frame);

            save_on = false;

            stop_on = false;

            capture_on = true;

 

        }

        else if (key == 27) break;

 

        if (frame_cnt < 100);

        else if ((frame_cnt < 200)) frame -= Scalar(0, 0, 100);

        else if ((frame_cnt < 300)) frame += Scalar(100, 0, 0);

        else if ((frame_cnt < 400)) frame = frame * 1.5;

        else if ((frame_cnt < 500)) frame = frame * 0.5;

 

 

 

 

        if (save_on)

        {

            writer << frame;

            put_string(frame, "SaveVideo", Point(10, 20));

        }

        else if(stop_on)

            put_string(frame, "StopSave", Point(10, 20));

        else if(capture_on)

            put_string(frame, "CaptureVideo", Point(10, 20));

 

        if (save_on && (int)now % 2 == 0)

        {

            put_circle(frame);

        }

 

        imshow("동영상 파일읽기", frame);

 

    }

 

    //waitKey(0);

}

 

+ Recent posts