-
[OpenCV C++] tracker 를 사용한 object tracker 구현해보기프로그래밍/OpenCV 2022. 1. 1. 16:02반응형
안녕하세요 까치입니다. opencv를 공부하던중인데
프로젝트를 통해 이미지 트랙킹하는 것을 구현해 보았습니다.
사용한 opencv에 들어있는 trackerCSRF를 사용했습니다.
먼저 selectROI를사용하여 ROI를 설정 했습니다.
그이후 tracker에 roi를 설정한 후
화면에 ROI를 따라 다닐 수 있도록 구현해 보았습니다.
#include <iostream> #include <stdio.h> #include <opencv2/opencv.hpp> #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/videoio.hpp> #include <opencv2/tracking.hpp> using namespace cv; using namespace std; int main(int ac, char** av) { //사용할 객체 생성 cv::VideoCapture cap("video/coffee.mp4"); cv::VideoWriter videoWriter; cv::Mat videoFrame; cv::Mat select_ROI; //capture 오픈 if (!cap.isOpened()) return 0; float videoFPS = cap.get(cv::CAP_PROP_FPS); //트랙커 설정 cv::Ptr<cv::Tracker> trac = cv::TrackerCSRT::create(); //비디오 첫 프레임 가져오기 cap.read(videoFrame); //roi 설정 cv::Rect2d roi = cv::selectROI("Select ROI", videoFrame, false); destroyWindow("Select ROI"); //트랙커에 트랙킹 할 roi설정 trac -> init(videoFrame, roi); //비디오 재생 while (cap.read(videoFrame)) { //비디오 재생에 맞추어 roi 트랙킹하도록 설정 if (trac->update(videoFrame, roi)) { select_ROI = videoFrame(Range(roi.y, roi.y + roi.height), Range(roi.x, roi.x + roi.width)); cv::rectangle(videoFrame, roi, cv::Scalar(255, 0, 0), 2, 8); } //트랙킹한 비디오 저장 videoWriter << select_ROI; //비디오 재생 cv::imshow("select_ROI", select_ROI); cv::imshow("video", videoFrame); if (cv::waitKey(1000/ videoFPS) == 27) break; }; //opencv끝나면 종료 cap.release(); destroyAllWindows; return 0; }
자세한 소스 코드는 https://github.com/hyunseokjoo/object_Tracking 방문하여 확인 부탁드립니다.
반응형'프로그래밍 > OpenCV' 카테고리의 다른 글
[OpenCV Python] 관점 변환 구현해보기 (0) 2022.01.01 [Opencv Python] 바코드 Detecting 하는 프로그램 만들기(feat . pyzbar) (0) 2022.01.01 [C++ OpenCV] Imread()함수 사용법 (0) 2021.12.18