관심쟁이 영호

OpenCV (with.c++) ㅣ opencv의 첫걸음! 본문

학교공부/OpenCV

OpenCV (with.c++) ㅣ opencv의 첫걸음!

관심쟁이 영호 2020. 10. 26. 19:43
반응형

안녕하세요.

관심 쟁이 영호입니다.

 

새롭게 OpenCV를 다루게 되었습니다!

대학 전공 공부를 하며 포스팅하는 관계로 업로드가 조금 늦어질 수 도 있겠지만..

최대한 빨리 올려보겠습니다!


OpenCV?

OpenCV란 인텔에서 개발되었으며, "컴퓨터 비전"을 목적으로 한 프로그래밍 라이브러리입니다.

Opencv

현재는 python을 통해서 사용하지만..

C++로도 구현할 수 있으며,

더욱 밑단에서 컴퓨터 비전을 다룰 수 있어서 이해만 할 수 있다면 더욱 깊은 곳까지 알 수가 있어요!

 

본 내용은

c언어나 c++언어에 대한 어느 정도의 지식이 있는 사람에게 추천을 드립니다.

바로 시작하겠습니다.

 

 

자료형을 들어가기 앞서서 이해해야 할 부분이 있습니다.

OpenCV에서는 영상을 행렬로 취급하여 다루게 됩니다.

 

유튜브 영상을 예로 들게 되면, 사각형의 박스에 영상이 나오게 됩니다.

해당 영상은 실제로 왼쪽 가장 상단 픽셀부터 ~ 오른쪽 가장 하단 픽셀까지

행렬 값으로 관리가 되게 됩니다.

 

그림으로 설명해드리자면!

픽셀

모니터를 자세히 들여다보면 위쪽 사진과 같이 아주 작은 네모 단위로 있어요!

저 네모 하나하나에 명령을 내릴 수 있게 됩니다.

 

 

OpenCV는 자체적으로 다양한 자료구조를 제공합니다.

여기서 말하는 자료구조란.. OpenCV를 사용하며 하게 될 작업을 위해서

미리 데이터?, 자료들을 사용하기 편하게 정해놓고 사용하도록 만든 구조를 말합니다.

 

OpenCV의 자료형

 

1. Point클래스

위쪽에 있는 "픽셀"이미지 중에서 하나의 포인트를 집어낼 수 있고 해당 포인트를 변수에 지정할 수가 있습니다.

이 변수를 선언하는 방법은 아주 많아요!

어렵게 표기하는 법, 비교적 간결한 문구를 통해 표기하는법 등등

많은 표기법이 있는데

 

어차피 간편한 표기법만 사용하기 때문에 간편한 표기법만 다루 겠습니다.

 

위의 이미지처럼 "Point2i impoint(10, 20); 과 같이 선언 및 초기화를 할 수가 있어요!

 

문구에 대해 설명을 하자면..

 

point

위와 같이 볼 수 있어요!

Point2d, 2f와 같이 double, float형태로도 선언이 가능하답니다. 그리고

Point3i 와 같이 3차원으로 지정을 할 수도 있는데요! 이렇게 된다면

Point3i impoint2(10, 20, 30)과 같이 3개의 값을 전해줘야 합니다!

 

2. Rect클래스

Rect타입은 사각형을 만드는데 도움을 주는 타입이에요!

rect타입

위 사진과 같이 선언 및 초기화를 할 수 있어요!

해당 내용을 설명하면!

 

위의 사진과 같이 설명될 수 있어요!

이것 말고도 선언 방식이 많아요!

한번 비교해보시길 바랍니다!

 

- Rect2i imrectangle2(point1,가로, 세로);

- Rect2i imrectangle3(10, 20, size- 가로 x 세로);

- Rect2i imrectangle4(point 1, point 2);

우와 정말 많은 방법으로 선언을 할 수가 있어요!

 

3. Scalar클래스

제가 어느 정도 공부를 한 상태에서 생각하기에

이 클래스를 가장 많이 사용하는 것 같아요!!

Scalar에 대해서 먼저 말씀드리자면 Scalar는 단순한 숫자를 말합니다!

이러한 자료형이 있는 이유는요..

픽셀에다 Scalar를 지정하여 RGB 값을 지정하게 되는데 그때 단순한 숫자가 필요하기 때문이에요!

 

스칼라

위와 같이 선언을 할 수 있어요!

Scalar라는 자료형에 20.23, 20, 30 이 세 개의 값을 각각 저장하고 있습니다!

 

실제로 이 값을 통해서 픽셀에 대입하게 되면..

B = 20.23, G = 20, R= 30의 값을 가지게 되고 세개의 값을 섞은 색 값이 나오겠죠!!

 

4. Mat 클래스

이 클래스는 가장 많이 사용하는 클래스예요!

어떤 클래스냐면요!

행렬을 표기하는 클래스입니다.

위에서 말씀드린 Rect클래스와 다른 점은

Rect클래스의 사각 형안에는 데이터가 저장되어 있지 않아요!

하지만 Mat클래스는 픽셀 하나하나가 데이터를 저장하고 있습니다.

 

Mat을 선언해볼게요!

위쪽과 같이 선언할 수 있어요!

설명을 추가적으로 하자면!

다음과 같이 볼 수 있어요!

이전에 설명한 것과 같이 Mat은 여러 방법으로 선언할 수 있어요!

 

Mat immatn(사이즈, 타입, 스칼라);

Mat immatn(사각형의 타입, 타입, 스칼라);

등과 같이 행렬을 네모 모양의 행렬을 선언하기에 충분한 표기만 된다면

웬만한 것은 다 허용하고 있어요!

 

그럼 위에 선언한 것을 출력하여 어떤 값들이 들어있는지 살펴볼게요!

출력

보시면 아시겠지만!

스칼라를 넣어준 변수에서는 해당 스칼라로 초기화가 되어있는 것을 알 수 있어요!

좀 더 나 아가다 보면 부분 부분에 초기화할 수 있고

부분의 값에 접근할 수 있는 등 많은 것을 배우게 됩니다!

 

그리고 채널과, 타입에 대한 의문사항이 드실 거 같아..

다음 게시를 채널 및 타입에 대해서 다루도록 하겠습니다.

 

여기까지 관심 쟁이 영호였습니다.

읽어주셔서 진심으로 감사합니다.

 

해당 블로그의 글은

"OpenCV로 배우는 영상 처리 및 응용" 책을 참고하여 작성하였습니다.

300x250
Comments