관심쟁이 영호

[#4]OpenCV ㅣ 트랙바 조절, 그리기 함수ㅣtrackbar, line, rectangle 본문

학교공부/OpenCV

[#4]OpenCV ㅣ 트랙바 조절, 그리기 함수ㅣtrackbar, line, rectangle

관심쟁이 영호 2020. 11. 1. 01:30
반응형

안녕하세요!

관심쟁이 영호입니다.

건강한 하루를 보내고 계신가요!?

 


오늘은 OpenCV의 트랙바, 그리기 함수를 공부할 예정이에요!

OPENCV

 

트랙바란?

우리가 브라우저를 사용하면서 오른쪽에 있는 "스크롤바"와 비슷하다고 생각하면 됩니다!

윈도우 제어 창에 바를 생성하여 값을 받아내는 것인데요!

 

이 바가 이동됨에 따라 다른 값을 리턴하게 되고, 거기에 해당하는 모종의 코드를 추가시키면

창에 적용된 행렬의 값이나 다른 값들을 제어할 수 있게됩니다!

 

사용방법은?

트랙바는 이전에 사용했던 마우스콜백 함수와 비슷합니다.

1. 똑같이 콜백함수를 등록한다.

2. 윈도우창을 만들고 트랙바를 생성한다.

3. 트랙바생성하면서 함수를 넘겨준다.

4. 트랙바의 값을 받을 함수를 코딩한다.

 

이 정도가 되겠네요!

바로 코드를 살펴보겠습니다.

잘 보이시나요!?

 

#1 가장먼저 전역변수로 title, image를 선언해주었습니다.

이유는 콜백함수를 실행할 때 해당값을 전달해주어야 하는데

아직 저의 지식수준으로는 힘들어서 전역함수를 사용하고 말았습니다..

인자로 넘겨주는 방법을 찾아야겠어요!!

 

#2 이전의 포스팅과 같은 내용으로 윈도우창을 만들어주고 image에 크기, 타입, 값을 초기화 해주었습니다!

 

#3 createTrackbar()를 이용하여 트랙바의 함수를 콜백해주었습니다.

 

다음으로

createTrackbar("트랙바제어-밝기값", title, &value, 255, onChange)에 해당하는 뜻을 볼게요!

 

"트랙바제어-밝기값" = 트랙바의 이름을 설정!

title = 트랙바가 생길 윈도우 창을 지정해주는겁니다! (윈도창이 여러개면 어디창에 생길지 모르니까요!)

&value = 슬라이더의 위치를 반영하는 값이에요!

count = 슬라이더의 최대값이에요! 최소값은 항상 0으로 설정되어 있습니다.

onChange = 바의 위치가 바뀔때 마다 호출되는 콜백함수입니다.

 

그 다음 으로 아래 코드를 살펴볼게요!

------------------------------------------------------------------------

void onChange(int value, void* userdata) {
int add_value = value - 130;
cout << "추가 화소값" << add_value << endl;

Mat tmp = image + add_value;

imshow(title, tmp);
}

------------------------------------------------------------------------

 

add_value를 선언하여 넘겨온 value에서 130의 값을 빼줍니다!

이유는 value의 값이 0~255의 범위를 갖기 때문에..

범위를 -130 ~ 125의 값을 주기 위해서 입니다!

 

그리고 tmp라는 행렬을 새로 선언해주고 기존의 전역변수로 있던 image에 트랙바의 값을 초기화해줍니다.

마지막으로 기존의 title에 tmp값을 넣어 줍니다.


그리기 함수

그리기 함수는 대표적으로  line, rectangle함수가 있습니다.

 

먼저 함수를 살펴보겠습니다.

 

void line(Mat& img, Point pt1, Point pt2, const Scalar & color, int thickness = 1, intl ineType = 8, int shift = 0)

void rectangle(Mat& img, Point pt1, Point pt2, const Scalar & color, int thickness =1, int lineType = 8, int shift = 0)

 

이 내용을 표로 나타내면!

 

이름 내용
void line 선을 그리는 함수
void rectangle 사각형을 그리는 함수
Mat& image 그림을 그릴 대상!
Point pt1, pt2 두 점
int thickness 선의 두께
int lintType LINE_4 = 4-방향 연결선
LINE_8 = 8-방향 연결선
LINE_AA = 계단현상 감소선!
int shift 입력 좌표에서 오른쪽으로 연산한 결과

바로 다음으로 코드를 살펴볼게요!

 

색값을 blue, green, red 변수에 Scalar타입으로 선언 및 초기화 해두고!

 

포인트 4개를 선언초기화한다음!

line함수에 pt를 넣어주면서 선을 그어주었어요!

비교적 쉬워서 이해가 잘되시겠죠!!?

 

같은 방법으로 rectangle함수에 사용하면

사각형이 그려진다는 말씀!

 


오늘은 여기까지 공부를 해볼게요!

그리기 함수가 생각보다 쉬워요 ㅎㅎ

 

이 함수는 많이 사용하지는 않는데

영상작업하면서 작업이 어떻게 되는지 살펴볼 때 사용한다고들 하더라구요!

그래서 알아두면 작업할 때 편해지니까 알아봐보았습니다!

 

읽어주셔서 감사해요!

이 다음은 사진을 받아오고 거기에 대한 함수를 공부해보겠습니다!

 

300x250
Comments