관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

OpenCV로 시작하는 컴퓨터 비전 8 - 페인팅 기능 만들기 본문

인공지능/컴퓨터 비전

OpenCV로 시작하는 컴퓨터 비전 8 - 페인팅 기능 만들기

huenuri 2024. 11. 8. 04:05

이제 2장의 마지막 학습을 시작해 본다. 짧은 학습이라 이전 포스트에 이어서 붙일까 고민했지만 내용이 상이하니 새로운 장에 쓰는 게 나을 것 같다.


 

 

 

페인팅 기능 만들기

때로는 마우스가 이동한 궤적을 따라 페인팅하는 기능이 필요하다. 예를 들어 나중에 사용자가 물체와 배경 일부를 페인팅하면 물체 영역을 오려내는 GrabCut이라는 알고리즘을 공부하고 실습한다. 이때 페인팅 기능이 필요하다.

다음 예제는 왼쪽 버튼을 클릭하면 파란색으로 페인팅하고 오른쪽 버튼을 클릭하면 빨간색으로 페인팅하는 프로그램이다. 이 프로그램은 이전 프로그램의 골격을 그대로 사용한다. 단지 마우스 이벤트가 발생했을 때 수행하는 콜백 함수의 논리만 다르다. 27행은 'Painting'이라는 윈도우에서 마우스 이벤트가 발생하면 painting 콜백 함수를 호출하라고 등록한다.

 

13~14행은 왼쪽 버튼을 클력했을 때 img 영상에 원을 그린다. 14행 circle 함수의 첫 번째 인수는 원을 그릴 영상, 두 번째 인수는 원의 중심, 세 번째 인수는 반지름, 네 번째 인수는 색깔, 다섯 번째 인수는 두께다. 두께를 -1로 설정하면 원의 내부가 채워진다. 따라서 14행은 중심은 커서 위치고 반지름은 BrushSiz이고 속이 찬 파란색 원을 그린다.

15~16행은 오른 쪽 버튼을 클릭했을 때 빨간색 원을 그린다. 17~18행은 왼쪽 버튼을 클릭한 채 이동할 때 파란색 원을 그린다. 19~20행은 오른쪽 버튼을 클릭한 채 이동할 때 빨간색 원을 그린다. 22행은 붓칠이 된 영상을 윈도우에 다시 디스플레이한다.

 

빨간색 붓과 파란색 붓으로 페인팅하기

 

 

 

 

 


 

 

 

학습을 마치고

이로써 길고 길었던 2장 학습을 거의 마쳤다. 페인팅 실습도 정말 재미있었다. 마우스 말고 펜으로도 그려보았는데 펜으로 하면 왼쪽과 오른쪽 오른쪽 버튼이 없어서 모두 파란색만 출력되었다. 

이제 연습문제를 풀어보려고 한다. 9문제나 되어서 다 풀려면 한참 걸리겠지만 분명 모두 잘 해결하리라 믿는다.