이번에 필요에 의해서 ttf 폰트를 외부에서 가져다 써야되는 상황이 발생하였다.

     

    우선 Freetype을 사용하려면, 두가지 라이브러리가 설치되어있어야 한다. 

     

    그리고 난 다음 아래의 소스를 이용해여 테스트해보자.

     

    1. 소스

      소스에는 특별한 것이 없다. freetype 객체를 선언후 font를 등록하고 사용하기만 하면 된다. 

     

    /* Freetype2 Example -
       AUTH : makeutil.tistory.com
       MENT : requirement - freetype & hardbuzz 
    */

    #include 
    #include 
    #include 

    using namespace cv;
    using namespace std;
    using namespace cv::freetype;

    //cv::Ptr ft2;
    Ptr ft2ext0;
    Ptr ft2ext1;
    Ptr ft2ext2;
    Ptr ft2ext3;

    int main(int argc, char** argv)
    {
        int range_count = 0;

        ft2ext0 = createFreeType2(); // Initialization for freetype
        ft2ext1 = createFreeType2(); // Initialization for freetype
        ft2ext2 = createFreeType2(); // Initialization for freetype
        ft2ext3 = createFreeType2(); // Initialization for freetype
        ft2ext0->loadFontData("/home/ubuntu/a.ttf",0);
        ft2ext1->loadFontData("/home/ubuntu/b.ttf",0);
        ft2ext2->loadFontData("/home/ubuntu/c.ttf",0);
        ft2ext3->loadFontData("/home/ubuntu/d.ttf",0);

        VideoCapture cap("/dev/video0");   // Input = Camera
        Mat img_frame;

        if (!cap.isOpened()) {
            cerr << "ERROR! Unable to open camera\n";
            return -1;
        }


        while(1) 
        {
            cap.read(img_frame);  // Capture from camera
            if (img_frame.empty()) {   // read OK?
                cerr << "ERROR! blank frame grabbed\n";
                break;
            }

            // 폰트를 등록
            ft2ext0->putText(img_frame,"Font0",Point(100,100),40,Scalar(0,100,255),-1, LINE_AA, false);
            ft2ext1->putText(img_frame,"Font1",Point(100,200),40,Scalar(0,100,255),-1, LINE_AA, false);
            ft2ext2->putText(img_frame,"Font2",Point(100,300),40,Scalar(0,100,255),-1, LINE_AA, false);
            ft2ext3->putText(img_frame,"Font3",Point(100,400),40,Scalar(0,100,255),-1, LINE_AA, false);

            imshow("원본 영상", img_frame);
            if (waitKey(5) >= 0)
                break;
        }
        return 0;
    }

     

    2. 빌드하기

       ubuntu@ubuntu:~$ g++ -o freetype freetype.cpp $(pkg-config opencv4 --libs --cflags)

     

    3. 결과화면

      예제를 실행하면 아래와 같이 외부 폰트를 이용하여 문자를 출력할 수 있다. 

     

    OpenCV에서 한글을 출력하려면 FreeType을 이용해야 되는 경우가 있으니, 익혀두면 도움이 될 것 같다. 

     

    * 참고로 OpenCV에서 Freetype사용하려면, libfreetype6-dev와 libhalfbuzz-dev를 설치한 상태에서 opencv를 빌드해야 하므로, apt를 이용해서 우선 관련 패키지를 설치하고 opencv에서 cmake를 통해 빌드 설정을 진행할때 FREETYPE=ON (또는 1)로 설정 후 빌드, 설치 순으로 진행해야 사용할 수 있다는점 기억해 두자.

     

    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기