fps 표시 및 동영상 파일 저장하며 webcam 영상 보여주는 OpenCV C++ 예제 코드OpenCV/OpenCV 강좌2023. 10. 10. 22:21
Table of Contents
반응형
fps를 화면에 표시해주고 동영상 파일로 저장하면서 webcam 영상을 보여주는 OpenCV C++ 예제 코드입니다.
저장된 동영상 파일이 빠르게 재생되는 문제가 없습니다.
2022. 1. 3 최초작성
#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main(int argc, char* argv[]) { cv::VideoCapture cap(0); if (!cap.isOpened()) { std::cout << "웹캠을 열 수 없습니다.\n"; return -1; } cv::Mat frame; bool ret = cap.read(frame); if (!ret) { cout << "캡쳐 실패" << endl; return -1; } VideoWriter writer; int fourcc = VideoWriter::fourcc('X','2','6','4'); // 녹화된 파일이 빠르게 재생되는 현상은 웹캠의 fps를 가져와서 VideoWriter에 입력해주면 해결됨. // 웹캠에서 fps값을 가져오지 못하는 경우 cap.get(CAP_PROP_FPS)의 리턴값이 0이 됨. 수동으로 입력해줘야함. // https://answers.opencv.org/question/16522/video-recording-is-too-fast/ double fps = cap.get(CAP_PROP_FPS); writer.open("output.avi", fourcc, fps, frame.size()); if (!writer.isOpened()) { cout << "녹화를 준비할 수 없습니다.\n"; return -1; } while(1) { auto total_start = chrono::steady_clock::now(); bool ret = cap.read(frame); if (!ret) { cout << "캡쳐 실패" << endl; return -1; } writer.write(frame); auto total_end = chrono::steady_clock::now(); float total_fps = 1000.0 / chrono::duration_cast<chrono::milliseconds>(total_end - total_start).count(); std::ostringstream stats_ss; stats_ss << fixed << setprecision(2); stats_ss << "Total FPS: " << total_fps; auto stats = stats_ss.str(); int baseline; auto stats_bg_sz = getTextSize(stats.c_str(), FONT_HERSHEY_COMPLEX_SMALL, 1, 1, &baseline); rectangle(frame, Point(0, 0), Point(stats_bg_sz.width, stats_bg_sz.height + 10), Scalar(0, 0, 0), FILLED); putText(frame, stats.c_str(), Point(0, stats_bg_sz.height + 5), FONT_HERSHEY_COMPLEX_SMALL, 1, Scalar(255, 255, 255)); namedWindow("output"); imshow("output", frame); int key = waitKey(1); if (key == 27) // ESC 키 누르면 중지 break; } cap.release(); writer.release(); return 0; } |
반응형
'OpenCV > OpenCV 강좌' 카테고리의 다른 글
OpenCV Python – Super Resolution 예제 (0) | 2023.10.11 |
---|---|
동영상 파일을 RTSP 스트리밍하기 (0) | 2023.10.10 |
OpenCV로 Aspect Ratio 시각화해보기 (0) | 2023.10.10 |
4분할로 웹캠 또는 동영상을 보여주는 OpenCV C++ 예제 (0) | 2023.10.08 |
OpenCV Python – 이미지 연결하는 hconcat, vconcat 예제 (0) | 2023.10.08 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
@webnautes :: 멈춤보단 천천히라도
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!