OpenCV RTSP 영상읽기 with C++
파이썬으로 작성하려고 했으나
좀더 테스트가 필요한 상황
C++과 동일한 코드임에도 동작하지 않고 있다.
해결할 수 있는 방법은 좀더 찾아봐야 할 것 같고
일단 이번엔 C++을 기반으로 영상읽기에 대한 간단하게 설명해 보자.
- #include <opencv/cxcore.h>
- #include <opencv/highgui.h>
- int main(int ac, char *av[])
- {
- // 휴바이론 ND821 h.264 640x480
- cv::Ptr<CvCapture> capture = cvCaptureFromFile("rtsp://admin:admin@192.168.1.30:554/stream2");
- cv::namedWindow("KnVision");
- for(;;)
- {
- cv::Mat frame = cvQueryFrame(capture);
- cv::imshow("KnVision", frame);
- if(cv::waitKey(1) >= 0)
- break;
- }
- }
위의 코드는 구글링으로 발견한 어느 세미나 자료에서 본 샘플 코드를 기반으로 작성한 코드인데
국내 블러거 분들이 올린 소스코드에서도
유사한 코드가 있긴 했었다.
http://blog.daum.net/99cassiopeia/9 <--- 이 코드는 위의 코드와 유사함
http://blog.daum.net/pg365/195 <--- 여기 블러그에 소개된 코드는 VideoCapture를 이용한 방식인데 영상이 재생되진 않음
C++로 작성하니 좀 더 명확한 부분이 보인다.
이 코드에서 사용한 함수들은 모두 highgui 라이브러리 모듈을 참조하는 함수들이다.
http://docs.opencv.org/modules/highgui/doc/highgui.html
따라서, 컴파일/링크할 때 코어라이브러리와 함께 highgui 라이브러리를 포함시켜 링크를 해줘야 하고
실행 시 opencv_highgui.dll 을 참조하게 된다.
소스코드는 간단하기 때문에 라인번호로 설명하겠다.
7번라인 : cvCaptureFromFile 를 이용해 스트림을 오픈한다.
(rtsp 주소는 해당 카메라의 설정부분에서 확인이 가능하다)
# h.264가 아닌 코덱을 사용했을 경우 에러와 함께 재생되지 않고 있다.
# 이것도 확인이 필요한 사항
이때 리턴되는 객체는 VideoCapture 함수와는 다른 CvCapture 로 돌려받는다.
9번라인 : 받아온 영상을 출력하기 위한 namedWindow를 생성한다.
10번라인 : 무한루프 루틴
12번라인 : cvQueryFrame함수를 이용해 CvCapture 객체의 화면을 Mat 자료형으로 받아온다.
13번라인 : namedWindow로 생성한 윈도우에 캡쳐한 영상을 출력한다.
15번라인 : 항상 잊지말아야할 waitKey함수 -1 일때가 입력이 없는 상태이다.
이 소스코드 원본에 destroyWindow 가 없어 같이 생략했었는데
다른 일반적인 윈도우 프로그램과 마찬가지로 인스턴스가 종료될때 같이 종료되는 것 같다.
별도의 이벤트 핸들러를 사용하는 게 아니라면 생략해도 무방하겠지만
실제 프로그램에선 종료확인등을 이벤트핸들러로 사용하게 될 가능성이 높으니
가능하면 습관적으로 입력해 두는 것이 좋을 듯 하다.
'ComputerVision' 카테고리의 다른 글
Python에서 OpenCV 사용하기 (0) | 2015.08.01 |
---|---|
C# 에서 OpenCV 사용하기 (0) | 2015.07.24 |
EmguCV, OpenCVSharp 카메라 캡쳐 코드 비교 (0) | 2015.07.24 |
OpenCV 영상읽기 with Python (0) | 2015.07.08 |
scipy, matplotlib 실행시 에러 (0) | 2015.06.05 |