• Tistory
    • 태그
    • 위치로그
    • 방명록
    • 관리자
    • 글쓰기
Carousel 01
Carousel 02
Previous Next

폰트 변경이 가능한 putText를 사용하자

Programming/OpenCV 2021. 4. 29. 16:45




opencv 를 이용하여 이미지에 글씨를 써서 디스플레이를 하는 경우가 종종 있었다.

이 와중에 또 출력은 한글과 영어를 둘 다 써야해서 이전에 정리한 방법으로 꾸역꾸역 쓰고 있었다.

이전 방법 : [Function] IplImage 에 한글text 삽입하기 (https://jangjy.tistory.com/60 [살다보니..])

 

한글을 사용하려면 위 방법을 사용하는 것 말고는 방법을 찾지 못했다.

하지만 이 방식의 경우 구버전의 IplImage를 사용하면서 opencv 버전이 올라가면 점점 사용이 불가능해져

opencv 버전을 강제로 3.4.0 버전을 사용하게 만든 주범이었다.

 

반대로 putText를 사용하면 폰트 변경은 가능하나 한글 출력이 불가능했고..

DC에 draw 하는 방식 또한 맘에 들지 않았다..

 

그러다 freetype 이라는 녀석을 이용하여 출력이 가능함을 알고 이와 관련한 내용을 정리.

대부분의 내용은 황선규님의 블로그에 정리된 내용을 참고하였다. (kkokkal.tistory.com/1325)

 

주요 내용을 정리하자면

  • opencv3.2 부터 freetype 모듈을 contrib 프로젝트를 통해 지원했다는것
  • 이를 위해서는 freetype과 harfbuzz 라이브러리를 미리 컴파일 한 후 opencv에서 포함하여 재빌드 해야한다는 것. 

이 두가지가 주요 골자였다. 추후 재사용을 위해 주요 내용을 메모..


 

1. freetype 라이브러리 빌드.

freetype 은 폰트 렌더링 라이브러리 라고 한다. 이런 라이브러리도 오늘 처음 알았다..

https://download.savannah.gnu.org/releases/freetype/

 

Index of /releases/freetype/

 

download.savannah.gnu.org

여기서 다운로드 받은 후 빌드. 

 

다만 이때 WITH_ZLIB, WITH_BZip2, WITH_PNG 옵션을 Off로 설정하지 않으면 opencv 빌드 단계에서 에러가 발생한다고 한다.

CMake-GUI 로 열었더니 해당 항목이 안보여서 원글에서 사용한대로 명령어를 사용하여 generate 했다.

cmake -DWITH_ZLIB=OFF -DWITH_BZip2=OFF -DWITH_PNG=OFF -G "Visual Studio 14 2015 Win64" [source root path]

 

INSTALL 빌드 시 C:\Program Files\freetype 에 파일이 복사되므로 generate 된 솔루션은 관리자 권환으로 실행 후 ALL_BUILD와 INSTALL 을 모두 빌드 해준다.

이후 환경변수에 이름은 FREETYPE_DIR, 값은 C:\Program Files\freetype 로 추가

 

2. Harfbuzz 라이브러리 빌드

이녀석은 오픈타입 텍스트 쉐이핑 엔진이라 한다.. 마찬가지로 다운로드 후 빌드..

https://www.freedesktop.org/software/harfbuzz/release/

 

Index of /software/harfbuzz/release

 

www.freedesktop.org

이녀석은 CMake-GUI 를 통해 만들었고 HB_HAVE_FREETYPE 옵션만 체크하고 나머지는 기본값으로.

마찬가지로 관리자 권한으로 실행 후 ALL_BUILD와 INSTALL 을 모두 빌드.

INSTALL 결과는 C:\Program Files(x86)\harfbuzz 에 복사되었다.

이후 환경변수 이름은 HARFBUZZ_DIR, 값은 C:\Program Files(x86)\harfbuzz 로 추가

 

3. opencv 빌드.

opencv / opencv-contrib 를 모두 다운로드 받고 압축 해제

generate 하기 전에 contrib의 모듈 중 freetype 모듈의 CMakeList.txt 파일을 수정.

수정 방법은  https://gist.github.com/UnaNancyOwen/14c72a3f10a46d41c359ab6ea307a1d2 를 참고하여 수정 했다고 했는데 다운로드 받은 opencv 버전에 따라 코드가 조금 다를 수는 있을 것 같다. 

나같은 경우도 코드 구조가 약간 달라 맞춰서 수정할까 하다가 황선규님께서 수정하신 내용을 그대로 사

용했다.

CMakeLists.txt
0.00MB

EXTRA MODULE PATH 에 contrib\module 경로 추가 해주고.. BUILD_opencv_freetype 체크하고,

BUILD_opencv_world 체크.

 

generate 후 솔루션은 마찬가지로 ALL_BUILD와 INSTALL 을 모두 빌드

 

이후 기존의 opencv 와 마찬가지로 include lib 경로 잡고 사용하면 된다.

 

 

4. freetype 사용법

#include "opencv2/opencv.hpp"
// freetype 헤더를 추가로 include
#include "opencv2/freetype.hpp"
 
using namespace cv;
// namespace도 추가해주기
using namespace cv::freetype;
using namespace std;


// FreeType2 객체 선언
Ptr<Freetype2> ft2; 

// FreeType2 객체 초기화
ft2 = createFreeType2();

// ft2객체 폰트 불러오기 
// 참고 코드에서는 바탕체를 사용했는데 이상하게 정상 동작하지 않았음.
// 원하는 폰트 동작여부 확인하고 사용하자
ft2->loadFontData("c:\\windows\\fonts\\HMFMMUEX.TTC", 0);

// 문자 출력 방법.
// 한글을 사용할때는 u8을 앞에 써서 utf-8 인코딩을 명시해줘야한다.
// 변수에 담긴 한글은 어떻게 처리하는지 조금 더 찾아보고 수정 예정.
ft2->putText(tImg, "한글변환테스트", Point(1300, 400), 20, Scalar(0, 100, 255), -1, LINE_AA, false);
ft2->putText(tImg, u8"u8 한글테스트", Point(1300, 500), 20, Scalar(0, 100, 255), -1, LINE_AA, false);
string st = "English test";
ft2->putText(tImg, st, Point(1300, 600), 20, Scalar(0, 100, 255), -1, LINE_AA, false);

> 출력결과

인코딩 명시하지 않으면 한글은 출력이 제대로 되지 않았다.

또한 변수에 담긴 한글은 어떻게 처리하는지 아직 확인하지 못함..

(원문 댓글에 값을 바로 넣는것은 확인 되나 포맷팅을 사용할 경우 어떻게 쓰는지 테스트 필요. 이는 확인 후 수정 예정.)

 

21.05.06. 수정.  link : jangjy.tistory.com/400

 

문자열 인코딩 변경하기

문자열을 다루다 보면 인코딩을 변경해야 하는 일이 발생한다. 전통적인 방식의 ansi 와 멀티바이트 방식인 유니코드, utf-8 등등 다양한 인코딩 방식이 존재하지만 이들간 변환이 간단하지는 않

jangjy.tistory.com

CW2A 기능을 이용하여 간단하게 사용 가능.

한글도 잘 출력 되는것을 확인.

저작자표시 (새창열림)

'Programming > OpenCV' 카테고리의 다른 글

OpenCV FileStorage를 이용하여 xml을 읽고 쓰자  (0) 2020.10.07
jpeg 파일 디코딩하기.  (1) 2015.11.11
unsigned char* 형 버퍼를 IplImage 또는 Mat 으로 변환하기.  (0) 2014.08.18
[Function] HoG Destriptor in OpenCV  (0) 2014.01.27
[Function] 영상을 회전 시키기  (0) 2014.01.23
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

카테고리

  • 살다보니.. (449)
    • 주절거림 (3)
    • 취미생활 (36)
      • 지식과 지혜 (3)
      • 풍경이 되어 (4)
      • Memories (17)
      • 엥겔지수를 높여라 (2)
    • mathematics (6)
      • Matrix Computation (2)
      • RandomProcesses (3)
    • English.. (8)
    • Programming (147)
      • C, C++, MFC (51)
      • C# (1)
      • OpenCV (17)
      • Python (58)
      • Git, Docker (3)
      • Matlab (4)
      • Windows (3)
      • Kinect V2 (2)
      • 기타 etc. (8)
    • 전공관련 (80)
      • Algorithm (6)
      • Deep Learning (54)
      • 실습 프로그램 (4)
      • 주워들은 용어정리 (8)
      • 기타 etc. (8)
    • Computer (118)
      • Utility (21)
      • Windows (31)
      • Mac (4)
      • Ubuntu, Linux (58)
      • NAS (2)
      • Embedded, Mobile (2)
    • IT, Device (41)
      • 제품 사용기, 개봉기 (14)
      • 스마트 체험단 신청 (27)
    • Wish List (3)
    • TISTORY TIP (5)
    • 미분류. 수정중 (1)

태그목록

  • 큐슈
  • matlab function
  • DeepLearning
  • 칼로리 대폭발
  • CStdioFile
  • 일본
  • ReadString
  • portugal
  • 매트랩 함수
  • 오봉자싸롱
  • 포르투갈
  • 딥러닝
  • utility
  • DSLR
  • 에누리닷컴
  • Computer Tip
  • ColorMeRad
  • LIBSVM
  • function
  • 크롬
  • 매트랩
  • 후쿠오카
  • random variable
  • Deep Learning
  • 갤럭시노트3
  • matlab
  • Convolutional Neural Networks
  • review
  • 스마트체험단
  • SVM

달력

«   2025/07   »
일 월 화 수 목 금 토
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
07-01 16:17

LATEST FROM OUR BLOG

RSS 구독하기

BLOG VISITORS

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015 Socialdev. All Rights Reserved.

티스토리툴바