#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);
}