본 글은 제가 직접 쓴 글이 아니라, 저희 PinkLAB의 유투브 채널의 공개 강의 영상들을 읽고, 따라한 한 수강생의 글을 제 블로그에 공유한 내용입니다.
https://youtu.be/1Ko-0ijS4Eg?feature=shared
안녕하세요, 이번시간에는 [ Cartoon 스타일 만들기 ] 라는 주제의 강의를 학습하고 글을 써 봅니당... !!!
오잉! 하고 놀라신 분들이 계실거예요, ㅋ_ㅋ 이번 강의부터는 강사님이 등장하시거든요!
예상은 하셨을 거예요. 지난 시간에 맘에든다고 귀엽다고 "께에속" 말씀하셨으니까요 🤭
우리는 지난 시간에 이어서 오늘도 R2R 강의를 듣고있어요. Rush to Ros! 이건 이제 아실거예요. 그쵸!
현재 우리는 실전편을 듣고 있구요,
실전편 중에서도 OpenCV tutorials 이에요.
이번에 할 건 Cartoon Styler를 한 번 구현을 해 볼 예정이예요.
Cartoon Styler, 이거예요. ( 1:27 ㅋㅋㅋㅋㅋ웃음타임 꽁짜 나눔! )
이게 원본이구요, 우리의 이전 영상을 기준으로 하면, img_raw topic이에요.
그리고 여기를 일종의 양방향 필터라고 하는데 일종의 블러 처리를 한 거예요.
블러 처리를 해서
동그라미 부분💙 들을 보시면 색상이 단순화 된답니다.
색상의 변화가 없어지는 거예요.
자잘한 주름들이 사라지는 효과가 있어요.
그리고 여기에서 또 Edge 를 Detection 해요. 외곽선을 따는거죠.
그래서 이 외곽선과 단순화시킨 색상을 더해버리는 거예요.
실제로는 비트와이즈 엔드 연산(✍🏻)을 취하는데, 개념적으로 그냥 더한다고 생각을 해도 될 것 같다고 하셨어요.
그래서 이렇게 카툰 스타일을 만들어 내는 거죠!
일단, Edge Detection 때에도 이렇게 가이드를 해 주셨지만,
영상을 보고 있는 시점에 이 주소에 있는 코드가 약간씩 변할 확률이 높아요.
강사님께서 계속 코드를 수정하신대요.
근데 영상은 계속 그에 맞춰서 수정을 하지 못하기 때문에,
지우고 다시 깔자고 가이드를 한다고 하셨어요.
강사님께서 git을 설명을 한 적이 없으시기도 하고, 학생들이 어떻게 코드를 공부하고 있는지 모르니
가장 효율적이라 생각한 방법을 제시해 주셨어요.
결과적으로는 여기( https://github.com/PinkWink/opencv_tutorials_for_ROS2.git )
GitHub - PinkWink/opencv_tutorials_for_ROS2: opencv_tutorials_for_ROS2
opencv_tutorials_for_ROS2. Contribute to PinkWink/opencv_tutorials_for_ROS2 development by creating an account on GitHub.
github.com
에서 받으시면 된다 하셔요.
기존에 my_opencv_tutorials 라는 workspace가 있다고 생각을 했구요, 빌드를 여기서 한 번이라도 하셨다면,
이 폴더들이 만들어 져 있을 거예요.
src는 원래 source 코드가 보관되어 있는 폴더란 말이예요.
그래서 이 source 코드가 보관되어있는 폴더 포함, build 정보를 다 지우는 거예요.
그럼 src 폴더는 지우면 안 되니까,
mk dir 명령어를 한번 더 만들어 두는거예요.
그리고 현재 두 줄의 명령은 cd 명령으로 여기로 갔을 때 실행 한 거 잖아요.
그러니까 다시 또 src 폴더로 넘어가서 cd 명령으로
git clone 명령으로 이 주소를 받으시면 된답니다.
여기가 어딨는지를 말씀드렸어요. Google에서 pinkwink github 하시면 된답니다.
그러고 나서 다시 workspace 로 간 다음에
build를 하시면 된답니다.
그런데 빌드를 하시고 난 다음에, 스타일에 따라서 강사님의 수업을 처음부터 들으신 분들은,
강사님께서는 alias를 만들어 두셨고, 이번에 실전 편에서 OpenCV를 다루는 부분에 work space의 이름인
my_opencv_tutorials를 alias로 잡아두셨어요.
그래서 build 하신 다음에는
한 번 환경을 부르셔야 해요.
핵심 코드죠. cartoon styler라고 이름을 붙여 놓은 이 핵심 코드의 전체구조는 이렇게 생겼어요.
main, __name__ 들어오구요,
class문에 여기서 이제 __init__이 들어있고 그 다음에 parameter_callback 함수를 좀 처리 해 두었어요. log를 남기려는 목적이구요,
그리고 실제로 모든 연산을 처리하는 image_callback 부분이 마련됐어요.
이제 main문 부분은 별로 볼게 없어요.
언제나 그렇듯, init 시키고,
Cartoon Style로 불러주고,
돌아라. 마음껏 돌아라 하다가
멈추는 부분이 들어갔어요.
이제 cartoon style에서 __init__ 부분에서는 Node 이름을 정해주었구요,
logger 남기구요,
그 다음에 image_raw topic을 구독하도록 만들어 주었어요.
이거 중요하죠. image_raw 토픽을 받고 거기서부터 연산을 하기로 했으니,
그리고 카툰의 결과를 이미지 카툰이라는 이름의 토픽으로 발행하도록 해 두었어요.
이제 이 부분은 뭐냐면요, Cartoon Styler에서 사용하는 좀 중요한 것 중의 하나가 양방향 필터의 두 계수예요.
그래서 그 두 계수를 파라미터로 선언을 하는데,
rqt의 parameter reconfiguration에서 슬라이드 바를 적용할 수 있도록 만들어 둔 거예요.
그리고 이제 파라미터들 우르르 선언하고
그리고 가져오구요.
파라미터 값 그 다음에.. OpenCV, cv_bridge 선언 해 두었어요.
parameter_callback 은 지난번에도 Edge Detection 때에도, hsv converter 때에도 비슷하게 이야기를 했지만,
log를 남기도록 적용을 해 두려고 parameter callback 함수를 선언 해 두었어요.
이제 제일 중요한 카툰 설정 부분이에요.
Cartoon Styler를 구현하는 부분이죠.
여기를 이제 보도록 할게요. image_callback 함수, 이 image_callback은 image_raw 카메라,
카메라를 OpenCV에서 읽어서 그걸 ros topic으로 발행하는 걸 subscription을 한단 말이예요.
그리고 그 subscription을 선언할 때 callback 함수 이름으로 잡아두었던 것이 Image_callback이었어요.
여기서 이제 parameter 가져오구요,
그 다음에 cv_bridge를 통해서 opencv data로 다시 바꾸고
( image_raw를) 양방향 필터 살짝 통과시키구요.
그 다음에 edge를 찾아내요.
그런데 edge를 찾으면 지난 시간에 혹시 기억이 나실 지 모르겠지만,
까만색 바탕에 흰색 선이 나와요.
근데 우리는 흰색 바탕에 까만색 선이어야만 한단 말이예요.
그래서 255에서 빼 줘요.
그리고 난 다음에 bgr 색 체계로 다시 바꿔야해요.
왜냐하면, 양방향 필터를 적용한 얘가 bgr이거든요. 3차원이에요. 근데 내가 Edge 때문에 grey란 말이야.
그걸 일부러 바꿔 둔 거예요.
그러구 합쳐요.
그리고 다시 토픽으로 발행해야 하니까 cv_bridge를 이용해서 OpenCV 데이터를 ROS 데이터로 바꿔치기 하고
데이터를 발행만 하도록 해 둔거에요.
강사님 수업에서 우리 R2R 과정이 처음에 입문 편 했단 말이에요(?)
여기서는 거의 용어만 좀 익혀보자 이런 개념이었구요, 그 다음에 응용 편을 했어요.
여기서는 강사님께서 직접 패키지를 만드는 과정들을 꽤 길게 설명을 더 자세히 하려고 노력을 하셨대요.
여기서 혼돈을 잠깐 일으키시면 안 되는데요, 파이썬 수업을 한 게 아니예요. 파이썬 문법을 잡으려는 수업이 아니라 로스에서 패키지를 만드는 것에 대해서 이야기를 한 수업이었어요.
그리고 이 때 Entry Point 이야기를 참 많이 했어요. 그래서 혹시 entry point는 왜 잡는거야, 이런게 궁금하시면 좀 돌아가셔야해요. 응용편으로 가 주시면 된답니다. 몇 시간 안되거든요!
그래서.. entry setup.py의 entry point에서
Cartoon 부분을 추가를 해 두셨다 해요.
그리고 launch 파일을 만들어 둬야해요.
cartoon styler launch xml 파일을 만들거고, image_pub Node 실행하도록 하고 방금 만든 카툰 실행하도록 해 두었어요.
빌드 하구요, 환경 부르시구요, 그리고 my_opencv_tutorials의 cartoon style xml을 실행하시면 된답니다.
이렇게 cartoon style을 만들어 보았어요.
이제 실제로 한 번 봐요. 어떻게 되는 건지 !
짠, ubuntu입니다.
코드는 이렇게 만들어 져 있어요.
조금 점검해야 될 건,
여기에 setup.py에서 entry point 부분 잡아주셔야 하구요,
그 다음에 setup.py에는 이 부분도 완성이 돼 있었어야 한답니다.
configure 폴더랑
launch 폴더에 있는 내용들도 모두 대상이 된다고 말을 해 줘야해요.
그리고 cartoon styler.launch.xml도 여기 만들어져 있구요.
그 다음에 cartoon cartoon 이렇게 만들어져 있어요.
이건 이제 git clone으로 여러분들이 가지고 오시면 되는 거였어요.
cd my_opencv_tutorials 여기서 이제 확인을 해 보면,
여기가 workspace니까,
build를 하면 얘네들이 만들어져 있단 말이에요.
그리고 src가 있구요,
지금 다시 빌드 하고싶으시면,
sudo rm -r 명령어로 build 폴더를 지우시고, install 폴더도 지우시고, src 폴더도 지우시면 돼요.
강사님은 지우지 않으셨어요.
그러고 난 다음에 src 폴더로 가서
또 git clone을 하시면 돼요.
이 상태에서 강사님께서는 alias를 my_opencv_tutorials를 만들어 두셨어요.
그리고 여기서 ros2 launcy my_opencv_tutorials를 하시고 cartoon_styler (안녕! 이건 강사님께서 일부러 수업자료랑 좀 다르게 보여드리려고 연출 하신거에요. ㅋㅋ)
이렇게 Edge Detection 나오고 Cartoon Image 나오고 다음에
이제 여기 원본이에요. 😊
그 다음에 양방향 필터로 살짝 색감을 줄인 걸 보시면 약간은 단순한 강사님의 손바닥이 좀 더 단순화 된 게 보이실거예요.
( 왼쪽에서 오른쪽으로 색이 단순화 된 거예요. )
그리고 아래 보시면 Edge를 Detection 한 거구요.
그리고 오른쪽 이미지는 그걸 Cartoon 으로 살짝 입힌거예요.
수업 자료 그대로 가시면 이 창은 뜨지 않아요. 이건 강사님께서 설명하시려고 해 둔 거예요.
그 다음에 또 환경 부르고 rqt 실행을 해요.
이렇게 나오는거죠.
opencv 이제 하나정도 더 남았어요. Optical Flow 라는게 있는데, 그것까지 하구 나면 OpenCV tutorials는 마쳐요.
이번시간은 여기까지 !
이번시간도 고생하셨습니다아 ^-^
'Robot > Robot Program - ROS' 카테고리의 다른 글
[R2R] 1-8 ROS2에서 Canny Edge Detector 구현하기 (2) | 2025.07.28 |
---|---|
[R2R] 1-7 HSV 색 체계를 이용한 채도, 명도 조절 패키지 사용해보기 - 실습 (1) | 2025.07.24 |
[R2R] 1-6 HSV 색 체계를 이용한 채도, 명도 조절 패키지 만들어보기. (1) | 2025.07.21 |
[R2R] 1-5 OpenCV에서 직접 받은 영상을 ROS2에서 FPS, size 조절하기 (2) | 2025.07.17 |
[R2R] 1-4 OpenCV로 읽은 영상에 parameter 적용하기 (1) | 2025.07.14 |
[R2R] 1-3 cv_bridge로 OpenCV 영상 토픽 발행 해보기 (1) | 2025.07.10 |
[R2R] 1-2 usb_cam pkg로 USB 카메라 활성화하기 2 (0) | 2025.07.07 |