이번 포스팅에서는 opencv 함수를 이용하여 그림 그리기 및 글자 쓰는 방법에 대해 알아보도록 하겠습니다.
먼저 그림 그리기에 앞서 그림을 그릴 도화지를 준비 해야겠죠?
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) 도화지 준비](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
아래와같이 500x 500x 3 shape의 하얀색 배경을 만들었습니다.
흰색 배경을 사용하는데 굳이 컬러 채널인 3채널을 이용한 이유는 추후 그림을 그릴때 사용되는 컬러를 입력받기 위해서 입니다.
1. 선그리기(cv2.line)
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 1. 선그리기(cv2.line) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 1. 선그리기(cv2.line)](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
output:
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 1. 선그리기(cv2.line) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 1. 선그리기(cv2.line)](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
선은 cv2.line함수를 이용합니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 1. 선그리기(cv2.line) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 1. 선그리기(cv2.line)](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 1. 선그리기(cv2.line) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 1. 선그리기(cv2.line)](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
2번째, 3번째 인자에 들어간 튜플 값은 두 점의 좌표를 의미합니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 1. 선그리기(cv2.line) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 1. 선그리기(cv2.line)](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
4번째 인자에 들어간 값은 컬러를 의미하는데요. B G R 순서로 설정되어있습니다.
우리 예시에서는 R 에 255가 채워졌으니까 도화지상에 빨간색 선이 그려진걸 알 수 있습니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 1. 선그리기(cv2.line) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 1. 선그리기(cv2.line)](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
마지막 인자에 들어간값은 선 굵기를 의미하고 5px로 하겠다는 의미 입니다.
만약 해당 인자를 지정해주지 않으면 디폴트로 1px가 적용됩니다.
2. 사각형 그리기(rectangle)
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle) 사각형 그리기](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
output:
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle)](https://blog.kakaocdn.net/dna/IRjd0/btrK8gis6fr/AAAAAAAAAAAAAAAAAAAAAEUcpNeVN4qNHdqpveUPJG9NGJOL2rcpS-1HKv82lQlv/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=9p7XYCz3eXqA1%2BhhlkALosiLZNY%3D)
두번째 인자에 들어간 튜플 (50, 200, 150, 100) 에서 50, 200은 사각형 좌상단의 x축, y축 좌표를 의미하고,
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle)](https://blog.kakaocdn.net/dna/bwphUB/btrK5DyIK7c/AAAAAAAAAAAAAAAAAAAAAJLHbdZjJagYnxbaXLNHau6UfvzHCHthxHfo0rBI2nIV/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=PtMFvRTJlmSzZGtgVjEbtDtjaas%3D)
150, 100은 사각형의 width, height를 의미합니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle)](https://blog.kakaocdn.net/dna/dmkBsW/btrK5DZPmlW/AAAAAAAAAAAAAAAAAAAAAO_J3T8ljGTxPtTvnSPEwv8uMMQ49DyWXTgD3hmWyKlY/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=TAVhiu%2BhUCpzGhb%2F7nKUKKwk0Ro%3D)
이 방법 외에도 아래와 같이 좌표를 두개로 쪼개서 적어줄 수도 있는데요.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle)](https://blog.kakaocdn.net/dna/tNVC1/btrK6QqMpFp/AAAAAAAAAAAAAAAAAAAAAPeOdt5YTYuNhK6XNxK1IeTBUFCj6vGV_lHd5eMPcBen/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=fyblhWOfQn33zF1Ckmj0FcCZyBE%3D)
(50, 200)은 이전과 마찬가지로 사각형의 좌상단 좌표,
(200, 300)은 width, height가 아닌 우하단 좌표를 가리킵니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle)](https://blog.kakaocdn.net/dna/bsgw3O/btrK6cAPXsU/AAAAAAAAAAAAAAAAAAAAAAZj053L4mBorPd5XSBcxME48CnO66btLB0xMJVARd7J/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=geMWNqIPo0AVGuSeq%2BidkHt%2FGgk%3D)
4번째 인자에 들어간 튜플은 컬러를 의미하는데요
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle)](https://blog.kakaocdn.net/dna/bqiP9o/btrK2txqLiC/AAAAAAAAAAAAAAAAAAAAAMAKGwGyItKIexl5gb_aJG8eUkMpG_JRbZrjQ_bdxx9L/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=oQ6BEihHuPHkjgkZxYQWWET5HLc%3D)
B G R순서에서 G가 255이니까 초록색 그림이 그려집니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle)](https://blog.kakaocdn.net/dna/cnu4lv/btrK6BtH1Jt/AAAAAAAAAAAAAAAAAAAAALPEA5DiMRMFUifu0Qu0ULqsrm_mBlzQ5wXPBXJAMRNW/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=BaC8EjwJAl1BEbA%2F1mzMcXIDLY0%3D)
마지막에 위치한 5는 선두께 5px을 의미합니다.
참고로 두께가 -1로 주게되면
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle)](https://blog.kakaocdn.net/dna/bparCa/btrK8gbGK8b/AAAAAAAAAAAAAAAAAAAAADXC3pVN3CmfZXzXJylK-seeza25ngKXJCdFShgOl8pz/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=64%2FJXS%2Fa9ZtfogR1KEDQhU0O7Ow%3D)
output:
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 2. 사각형 그리기(rectangle)](https://blog.kakaocdn.net/dna/trQlC/btrK4EZp7rc/AAAAAAAAAAAAAAAAAAAAAI32p-IjDO6lf2y-HJ7ZWV1klkvdiB84IWDLC-xUmEMa/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=osIq%2BccJkkcahELXZfObpwfJro0%3D)
해당 도형을 채우는 형태로 출력이 됩니다.
3. 원 그리기(circle)
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 3. 원 그리기(circle) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 3. 원 그리기(circle)](https://blog.kakaocdn.net/dna/bDzrmL/btrLael2fqC/AAAAAAAAAAAAAAAAAAAAAMUU3J-RsIBAe666ib0rMCMsfLl0rlQTaunkqYdt0-Vp/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=NJiUp9lvxXyRVmURYJWhZH%2FP5c0%3D)
두번째 인자로 들어가있는 튜플 (200, 200)은 원의 중심 좌표를 의미합니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 3. 원 그리기(circle) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 3. 원 그리기(circle)](https://blog.kakaocdn.net/dna/czJbln/btrLawmrkPI/AAAAAAAAAAAAAAAAAAAAAGGu-LhNoEXvJd9RNNrgJoA_jDSIyg9GeNxzck3_xlE1/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=Z%2B4X%2F%2BorfqxiuFcHLzc%2BCTI3e%2Fw%3D)
세번째 인자로 들어가있는 30은, 원의 반지름 길이를 의미합니다.
나머지부분은 컬러와 , 두께를 의미합니다.
output:
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 3. 원 그리기(circle) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 3. 원 그리기(circle)](https://blog.kakaocdn.net/dna/mLfP5/btrLectuRcB/AAAAAAAAAAAAAAAAAAAAAJ3gkvlpcOJRQhfQ4TnNIVSS338KvXp4lz8cNuYE-dw4/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=W1zn%2FBPHTsJlN%2Fsngw4UWcI1BNA%3D)
약간 원이 자글자글한 느낌이 있는데 우리가 직접 입력하지는 않았지만 디폴트로 설정(cv2.LINE_8)되어있는 값이 있기 때문인데요.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 3. 원 그리기(circle) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 3. 원 그리기(circle)](https://blog.kakaocdn.net/dna/dt2a80/btrLbMa83KA/AAAAAAAAAAAAAAAAAAAAALVR-mj49rE_qudNRajpKZ7uf50vfzY2vsxjAf7IpdZP/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=jhCCKqNQC9Zj1cGaQY79ChxMWow%3D)
해당 부분을 cv2.LINE_AA로 수정해주면 보다 스무스한 원을 구현할 수 있습니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 3. 원 그리기(circle) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 3. 원 그리기(circle)](https://blog.kakaocdn.net/dna/cMQ6rv/btrLak7wWdj/AAAAAAAAAAAAAAAAAAAAANnS3BwiZNxXsrNki02LzAlzBg3qVJzFgYQMDtCLrh-W/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=U6Jzyu18Z5dNKNY797EQg21Czfk%3D)
output:
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 3. 원 그리기(circle) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 3. 원 그리기(circle)](https://blog.kakaocdn.net/dna/t4J1K/btrK9yFb1N5/AAAAAAAAAAAAAAAAAAAAAGV8gKAQByTOJLReDvky0pESIrlJ75uN5mMgD8qs-HmT/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=SPLDfajppUmIrgnNN%2B17r64iwyA%3D)
4. 다각형 그리기(polylines)
이번에는 아래와 같은 다각형을 그려보겠습니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 4. 다각형 그리기(polylines) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 4. 다각형 그리기(polylines)](https://blog.kakaocdn.net/dna/3677Z/btrLb43MQnB/AAAAAAAAAAAAAAAAAAAAACVTpE4_ih97lHQMyV5zPNYBoo5sVh-900c51XcMfNdb/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=OM3jOJu6tLfbTPxVwnpaLw3RwtA%3D)
먼저 그리고 싶은 다각형의 꼭지점 좌표들을 numpy ndarray 형태로 만들어줍니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 4. 다각형 그리기(polylines) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 4. 다각형 그리기(polylines)](https://blog.kakaocdn.net/dna/ARBvd/btrK9zjPlb7/AAAAAAAAAAAAAAAAAAAAAESembFNoIhuthEz4_s5Xl2YY8LWXGFju0CwiJ-ZfOM5/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=BAENmxAG0VWACqYMa2H9CuEp7Do%3D)
그리고 앞서 좌표가 적힌 array를 리스트형태로 두번째 인자에 넣어줍니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 4. 다각형 그리기(polylines) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 4. 다각형 그리기(polylines)](https://blog.kakaocdn.net/dna/boHUsE/btrLaUN8hT4/AAAAAAAAAAAAAAAAAAAAAN3SKdyFhEPzpPjzNUEoaxtWP-txsVBWIYEHm0pweTWI/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=JE2QYXIlE5%2B9nNTl06pZavPDOzk%3D)
3번째 인자로 들어간 boolean값은 마지막 좌표와 첫번째 좌표를 이어줄지 말지를 결정하는 것인데요. 만약 False로 지정한다면, 아래와 같은 형태로 그려지겠죠.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 4. 다각형 그리기(polylines) [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 4. 다각형 그리기(polylines)](https://blog.kakaocdn.net/dna/LJNBr/btrLaUUWeiz/AAAAAAAAAAAAAAAAAAAAAJ9YhCnpje25XQptbyBWRnwuzZlPhvEwvbIc9nRs2NU_/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=fDevFzYYprVaumzqXv9fS9mrRE4%3D)
나머지 부분은 마친가지로 컬러와 두께를 의미합니다.
5. 글자 넣기(putText)
1) 문자열 텍스트
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 1) 문자열 텍스트 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 1) 문자열 텍스트](https://blog.kakaocdn.net/dna/bn1fI8/btrLa4C7bCa/AAAAAAAAAAAAAAAAAAAAAPryvkbtxxxaLcxW46xXrNmbrsqhoCiSmHEFcdzlE14U/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=Yna2a7fGmZ7kQaZSoSth2jshZsk%3D)
두번째 인자에 우리가 출력하고 싶은 문자열 텍스트를 넣어줍니다.
2) text 좌표지정
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 2) text 좌표지정 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 2) text 좌표지정](https://blog.kakaocdn.net/dna/nW6NM/btrK94qjeoG/AAAAAAAAAAAAAAAAAAAAAJmFUuZI-S6tGG7R48CQvkyLuzzfwdZc8R6DrBUaMwRA/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=2mmus01C3TWU%2BdTkcP4RL74YKhU%3D)
세번째 튜플은 글자의 좌측 하단 좌표를 가리킵니다.
그림으로 표시하면 아래와 같습니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 2) text 좌표지정 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 2) text 좌표지정](https://blog.kakaocdn.net/dna/cHYNXn/btrK90hhVdj/AAAAAAAAAAAAAAAAAAAAAHCtlr40hkxW6K7bU8kyFUGcI3Cdc9I8TitiPgTQqYoU/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=tYUhrKQtEOxTGtuHD3c9u6i2D7Q%3D)
3) font지정
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 3) font지정 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 3) font지정](https://blog.kakaocdn.net/dna/poLl9/btrLb5n6Ri1/AAAAAAAAAAAAAAAAAAAAADOFvYXtzy29dOlYpKA_i2WB3PTczaTUtHS1FHdGsrQs/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=JpzSB3fZily98gAjJd3kAkz6jqE%3D)
4번째 인자는 글자의 폰트를 지정해주는 부분인데요.
opencv에서 기본 제공하는 폰트는 아래와 같습니다.(한글에는 적용이 안됨)
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 3) font지정 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 3) font지정](https://blog.kakaocdn.net/dna/ctTstF/btrLadglxAM/AAAAAAAAAAAAAAAAAAAAAGUl8_UhO5zCotqmpLTB68VvttAyJDvb49UPhKU-zE1v/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=bxhZ8ZAdsZd9r4dV6fQHNrUY79Y%3D)
4) font 크기
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 4) font 크기 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 4) font 크기](https://blog.kakaocdn.net/dna/maDJG/btrLcJrzn8c/AAAAAAAAAAAAAAAAAAAAAJ0uK4NasVpqtjouzE3Sx3WNBSMT_p1pykXXzFcI_yYS/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=5iFiNFvteDl9nObRbE49tDkKxDw%3D)
5번째 인자에 들어가는 값은 font크기를 조절하는 부분인데요. 1을 기준으로 크면 글자가 커지고 1보다 작아지면 작아진다라고 이해하시면 됩니다.
나머지는 앞서 설명했듯이 컬러와 글자 두께를 의미하고, cv2.LINE_AA는 원그리기에게서 설명했듯이, 글자를 더 매끄럽게 표현해주기 위해 사용 되었다고 보시면 됩니다.
5) 한글 사용 하는 방법
지금까지 배운 방식으로 한글 text를 출력하려고 하면 아래와같이 ??????가 출력됩니다.
opencv에서는 한글을 지원해주지 않기 때문입니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법](https://blog.kakaocdn.net/dna/bHeyPf/btrLadAH1mN/AAAAAAAAAAAAAAAAAAAAAFm0OTDM5MeizcVbkUcC3wEu0SYvfJA206Mf3lo45q3x/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=9D545d8Y%2BT8eWNDcKIIaqwhVs8s%3D)
output:
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법](https://blog.kakaocdn.net/dna/Mzg1H/btrLb6m1grH/AAAAAAAAAAAAAAAAAAAAAAFJIQVCV1mawHIH1pkc4LKf_0Trb4zXUmtbCY52_tXx/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=asKiORAk6JUzy59HQCQcNQvwEDg%3D)
이 문제를 pillow를 통해 해결해보도록 하겠습니다.
(1) pillow 설치
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법](https://blog.kakaocdn.net/dna/Up0oz/btrK90Imrk7/AAAAAAAAAAAAAAAAAAAAAEEzej_FwLNQiaxWpYFDhx3Q_kZMXvMOaG84tVA_HcnP/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=p2f165G6KHdph1DGFkZ7zMxecF0%3D)
(2) 필요한 모듈 import
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법](https://blog.kakaocdn.net/dna/bMwRoj/btrLe0GwlmT/AAAAAAAAAAAAAAAAAAAAABOiHOAa32hepjP0y4wb1sKhCYVaOpdJJXNEU0Q6GOQZ/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=RK8a3WpKciq%2FOsvO5%2FIMJkd1g4U%3D)
(3) 사용하고 싶은 font 가져오기
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법](https://blog.kakaocdn.net/dna/lUwDM/btrK90O7lei/AAAAAAAAAAAAAAAAAAAAAAI9Q2h3M5FECWBzMRnVJqs6_OqPmgmLIdKJX9HbxRaT/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=T5PRGsqanwLMDJ48bQPccK0TysU%3D)
저는 fonts라는 디렉토리를 생성하고 그 안에 마루부리 폰트를 설치하여 넣어 놨는데요.
(해당 폰트는 링크에서 다운 받을 수 있습니다.)
아래와 같은 방법으로 우리가 사용할 폰트의 경로를 첫번째 인자에 넣어줌으로써 해당 폰트를 사용할 수있게 됩니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법](https://blog.kakaocdn.net/dna/bncnOn/btrLvKqikwF/AAAAAAAAAAAAAAAAAAAAAAymtcKD3DTFOqIUu5BzvNLYVcaGixrSaa3-VU0W6so4/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=0bDu2lvQlL8nhK7mbe%2BxFnNyH4Y%3D)
두번째 인자에 들어가있는 20은 해당 폰트의 크기를 의미합니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법](https://blog.kakaocdn.net/dna/mFyCq/btrLwIsfh0s/AAAAAAAAAAAAAAAAAAAAAGNo1_2w2VetRapAl1_vNWmkPRtgbCCnyyqAwm4ZUpmd/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=6ITZ4O2rdXciluGmmpaqM4kNn%2BU%3D)
(4) 도화지 타입 변경
이제 지정한 폰트를 도화지에 그려줘야 할 차례입니다.
그런데 기존 도화지는 넘파이 array로, pillow로 제작한 폰트를 사용할 수 없습니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법](https://blog.kakaocdn.net/dna/1WZMz/btrLqXq7Ak6/AAAAAAAAAAAAAAAAAAAAAEVBBKyR-GZlgWY-aXxQrngyc2AqCG_m0SGipV6hK0zF/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=mH0Q4VFIz3j6q%2BPDJl3u1bGUoTA%3D)
그렇기에 아래와 같은 방식으로 numpy array의 타입을 변경해줘야 합니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법](https://blog.kakaocdn.net/dna/bMisQ9/btrLovhlEpr/AAAAAAAAAAAAAAAAAAAAAHvfzjGedHqO_2RKX2n_L9eXJ54pM2reFsbgc-Vu0Syy/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=7CTNETh6lGmdM1rlIRgmjG7ym3Q%3D)
실제로 타입이 변경된걸 확인 할 수 있습니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법](https://blog.kakaocdn.net/dna/vZMPg/btrLu2kq6z2/AAAAAAAAAAAAAAAAAAAAAGK8RNvsQ-tEXk22cxUxlYWUdxiK8CafzW32SmgBIa-A/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=%2BJMaqwZDvF3Sn0qeGcqkyly%2FBg8%3D)
다음으로 img_pil 객체를 ImageDraw.Draw()인자 안에 넣어주는 형태로 draw란 새로운 객체를 생성합니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법](https://blog.kakaocdn.net/dna/dX5ezL/btrLtKSjKgq/AAAAAAAAAAAAAAAAAAAAAOrt3EcIarq3PswZ5WjkUUrIG4RgrezPIH1A2I7IpLIB/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=AY6%2BJG5X7%2BP0dCjG%2FUK%2FmOoCH1U%3D)
생성한 draw객체를 이용해서 글자를 적을 수 있습니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법](https://blog.kakaocdn.net/dna/bwheHx/btrLu1FOaou/AAAAAAAAAAAAAAAAAAAAADk1KDRhg0mcPV65krZ1f9tkipaNFHeRBZ3_a3O3B45J/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=yx7UoxDYQuo16fV83EurvDEK0kU%3D)
먼저 첫번째 인자에 있는 튜플값은 텍스트의 좌하단좌표 값을 의미합니다.
두번째 인자는 사용할 텍스트를 넣는자리,
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법](https://blog.kakaocdn.net/dna/bINnBD/btrLuyKDSfR/AAAAAAAAAAAAAAAAAAAAAMs1RBBTuezCuSpgFw6OKNVDJXYgWK9KozOKBU13pDue/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=5swGzgO39%2FBF83dAliygr2%2F1NKk%3D)
세번째는 컬러
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법](https://blog.kakaocdn.net/dna/byEQwJ/btrLx1LQMtf/AAAAAAAAAAAAAAAAAAAAAF92LLc6nS4HCAA60sdudgkXFvVMCvleQSZISHJ5tzdf/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=D%2FSFw%2FF0lbh%2FbmyYIh8rnrzzYp0%3D)
마지막 부분은 우리가 지정한 font를 넣는 자리입니다.
마지막으로 cv2.imshow()로 이미지를 띄워주기 위해 pillow image객체로 변경한 것을 다시 ndarray형태로 변경해줍니다.
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법](https://blog.kakaocdn.net/dna/mqYAa/btrLnsSuEZN/AAAAAAAAAAAAAAAAAAAAAKLoOAxPcXR8UNIAGbh1mpt0kehZfNNIcqRuI8IdOQ35/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=e0IdOlbsETOKFCQAHv5u9HMEXiQ%3D)
output:
![[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법 [opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) - 5. 글자 넣기(putText) - undefined - 5) 한글 사용 하는 방법](https://blog.kakaocdn.net/dna/ct8wve/btrLuw6769O/AAAAAAAAAAAAAAAAAAAAAFXqhmf9VGU1bNfaNi5pTTw8vvzi-n3OzWkbjclNMQ-K/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1756652399&allow_ip=&allow_referer=&signature=Z3j17Mi8gKlLfCNoba0cw3KLJgE%3D)
'머신러닝,딥러닝 > opencv' 카테고리의 다른 글
[파이썬 opencv] 오픈 cv에서 yolov3 사용하는 방법 (2) | 2022.10.26 |
---|---|
[파이썬 opencv] 오픈 cv에서 detection model 실행하는 방법 (0) | 2022.10.21 |
[오픈 cv] 트랙바란? 트랙바 사용방법(for opencv 초보자) (0) | 2022.09.14 |
[파이썬 opencv] 두 이미지 합치는 방법(with 크기 다른 이미지) (0) | 2022.09.13 |
[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 (0) | 2022.08.30 |
댓글