☞ 메인보드 : Jetson Nano Developer Kit
☞ 운영 체제 : Ubuntu 18.04 - JetPack 4.3
☞ OpenCV 버전 : 4.2.0
☞ 언어 : C++
목차
○ 1. 코드 작성
○ 2. CMAKE
○ 3. 실행 결과
이전 포스트에는 카메라를 사용하지 않고 cv::imread 함수를 이용하여 이미지를 불러와 출력하는 코드를 작성해보았다. 이번에는 카메라가 연결되었다는 가정하에 실시간 영상 프레임을 받아와 출력하는 과정에 대해 다루겠다.
① 코드 작성
※ 작업공간 만들기
mkdir -p ~/workspace/camera_test2/src
cd ~/workspace/camera_test2/src
먼저 Ctrl + Alt + T를 눌러 터미널을 열어준다.
그리고 공부할 내용들을 패키지별로 저장할 수 있게 작업공간을 만들고 코드를 작성하기 위해 src 디렉토리에 이동한다.
[편집기] camera_test2.cpp
gedit이나 vi와 같은 편집기 프로그램을 이용하여 코드를 작성할 수 있도록 명령어를 입력한다. gedit을 사용한다면 [편집기] 자리에 gedit이라고 적어넣어주면 새로운 창이 하나 실행된다.
※ camera_test2.cpp
#include <opencv2/opencv.hpp>
#include <iostream>
int main(){
cv::VideoCapture cap(-1);
cv::Mat frame;
cv::namedWindow("yaho", cv::WINDOW_AUTOSIZE);
if (cap.isOpened()){
while(1){
cap >> frame;
cv::imshow("yaho", frame);
if(cv::waitKey(1) == 27) break;
}
}
else{
std::cout << "No Frame" << std::endl;
}
cv::destroyAllWindows();
return 0;
}
※ 코드 분석
int main(){
cv::VideoCapture cap(-1);
cv::Mat frame;
cv::namedWindow("yaho", cv::WINDOW_AUTOSIZE);
VideoCapture 클래스는 cap 괄호에 들어갈 수는 -1, 0을 사용한다. 둘다 실행이 되었던 적이 있었는데 영상을 촬영할 때 동일한 카메라인데 각도가 달랐다. 그러나 보통 2개 이상의 카메라를 사용할 때 0, 1 두 개의 인덱스로 카메라가 구별이 된다. namedWindow는 이미지를 출력하는 창을 만드는 기능을 갖고 있으며, 창의 제목과 크기에 대해서 정할 수 있다. [cv::namedWindow 코드를 사용하지 않아도 cv::imshow로 출력이 가능하다.]
if (cap.isOpened()){
while(1){
cap >> frame;
cv::imshow("yaho", frame);
if(cv::waitKey(1) == 27) break;
}
}
cv::VideoCapture::isOpened() 는 VideoCapture의 호출이 성공한 경우에 참 값을 반환한다. 즉, 카메라가 사용가능하다면 while 조건문을 실행하여 영상 정보를 frame에 전달하고 cv::imshow 로 영상 출력을 반복하고 반복중 ESC 버튼을 눌러 키를 인식하면 while 조건문을 탈출하는 코드이다.
else{
std::cout << "No Frame" << std::endl;
}
cv::destroyAllWindows();
return 0;
}
cap.isOpened() 가 거짓을 반환한 경우, 카메라 인식을 못한 경우에 No Frame 문구를 출력하여 카메라 인식에 문제가 있음을 알리는 에러를 하나 넣어주면 이상이 생겼을 때 문제를 발견하기 쉽다. 위 과정들이 종료되었을 때는 모든 창을 종료한다는 내용이다.
② CMAKE
cd ..
[편집기] CMakeLists.txt
코드 작성을 완료하고 편집기 창을 종료하면 터미널의 위치가 workspace/camera_test2/src 디렉터리에 있을 것이다. cd .. 을 입력하면 상위 디렉터리인 workspace/camera_test2 로 이동한다. camera_test2 디렉터리에서 CMakeLists.txt를 작성해야한다.
cmake .
make
위와 같이 CMakeLists.txt를 작성하고 나서 camera_test2 위치에서 cmake . 와 make를 진행하고 아무 문제가 없다면 완료가 됐다는 문구가 출력될 것 이다.[cmake . 명령어는 현재 경로(.) 에서 cmake를 하겠다라는 의미로 사용한다.]
cmake를 완료하고 camera_test2 디렉터리를 보면 위와 같이 src 디렉토리와 CMakeLists.txt 외에도 많은 파일들이 생긴다. 이는 사용하려고하는 컴파일러나 라이브러리를 링크하거나 오브젝트 파일을 생성할 수 있는 파일들이 담겨 있다.
③ 실행 결과
./camera_test2
cmake와 make 과정을 완료하고 나면 실행 파일이 생겨 앞서 코딩하여 작성한 프로그램을 실행할 수 있다. 간단하게 카메라로 촬영하는 프레임을 실시간으로 출력하는 것이니 아래와 같이 카메라가 잘 작동한다면 문제 없이 잘 따라했다고 생각하면 된다.
터미널을 열어 ./camera_test2 를 입력하면 된다.
시공 촬영
쓰레기장에 피어나는 태원꽃
'IT > OPENCV' 카테고리의 다른 글
[OPENCV] 6. 이미지 프로세싱(2) - 샤프닝 & 가장자리 검출 (0) | 2021.05.08 |
---|---|
[OPENCV] 5. 색 공간 모델 HSV (3) | 2021.03.14 |
[OPENCV] 4. 이미지 프로세싱(1) - 블러링 (0) | 2020.12.13 |
[OPENCV] 2. OpenCV 로 이미지 파일 출력하기 (4) | 2020.01.28 |
[OPENCV] 1. Jetson Nano 보드 ubuntu 18.04에서 OpenCV 설치 및 CUDA 빌드 (23) | 2020.01.22 |