Skip to content

Instantly share code, notes, and snippets.

@aic25
Forked from UnaNancyOwen/CMakeLists.txt
Created April 9, 2019 00:26
Show Gist options
  • Save aic25/832ceb56f319e16fc10f16fe5215a7ff to your computer and use it in GitHub Desktop.
Save aic25/832ceb56f319e16fc10f16fe5215a7ff to your computer and use it in GitHub Desktop.
How to use OpenCV FreeType module with Visual Studio

OpenCV FreeType Module

Dependencies

Fix

  • opencv_contrib/modules/freetype/CMakeLists.txt
set(the_description "FreeType module. It enables to draw strings with outlines and mono-bitmaps/gray-bitmaps.")

find_package(Freetype REQUIRED)

# find_package(HarfBuzz) is not included in cmake
set(HARFBUZZ_DIR "$ENV{HARFBUZZ_DIR}" CACHE PATH "HarfBuzz directory")
find_path(HARFBUZZ_INCLUDE_DIRS
    NAMES hb-ft.h PATH_SUFFIXES harfbuzz
    HINTS ${HARFBUZZ_DIR}/include)
find_library(HARFBUZZ_LIBRARIES
    NAMES harfbuzz
    HINTS ${HARFBUZZ_DIR}/lib)
find_package_handle_standard_args(HARFBUZZ
    DEFAULT_MSG HARFBUZZ_LIBRARIES HARFBUZZ_INCLUDE_DIRS)

if(NOT FREETYPE_FOUND)
  message(STATUS "freetype2:   NO")
else()
  message(STATUS "freetype2:   YES")
endif()

if(NOT HARFBUZZ_FOUND)
  message(STATUS "harfbuzz:   NO")
else()
  message(STATUS "harfbuzz:   YES")
endif()

if(FREETYPE_FOUND AND HARFBUZZ_FOUND)
  ocv_define_module(freetype opencv_core opencv_imgproc PRIVATE_REQUIRED ${FREETYPE_LIBRARIES} ${HARFBUZZ_LIBRARIES} WRAP python)
  ocv_include_directories(${FREETYPE_INCLUDE_DIRS} ${HARFBUZZ_INCLUDE_DIRS})
else()
  ocv_module_disable(freetype)
endif()

Demo

2016-12-23_18h42_14

cmake_minimum_required( VERSION 3.6 )
# Create Project
project( test )
add_executable( freetype main.cpp )
# Set StartUp Project
set_property( DIRECTORY PROPERTY VS_STARTUP_PROJECT "freetype" )
# Set CharacterSet
if( MSVC )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8" )
endif()
# Find Package
set( OpenCV_DIR "C:/Program Files/opencv/build" )
set( OpenCV_STATIC OFF )
find_package( OpenCV REQUIRED )
if( OpenCV_STATIC AND MSVC )
foreach(flag_var
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
if(${flag_var} MATCHES "/MD")
string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
endif(${flag_var} MATCHES "/MD")
endforeach(flag_var)
endif()
if( OpenCV_FOUND )
# Additional Include Directories
include_directories( ${OpenCV_INCLUDE_DIRS} )
# Additional Library Directories
link_directories( ${OpenCV_LIB_DIR} )
# Additional Dependencies
target_link_libraries( freetype ${OpenCV_LIBS} )
endif()
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/freetype.hpp>
int main( int argc, char* argv[] )
{
cv::Mat image = cv::imread( "../lena.jpg" );
if( image.empty() ){
return -1;
}
// Create FreeType2
cv::Ptr<cv::freetype::FreeType2> ft2 = cv::freetype::createFreeType2();
// Load Font Data
ft2->loadFontData( "../NotoSansCJKjp-Regular.otf", 0 );
// Put Text
ft2->putText( image, "cv::freetype::putText()", cv::Point( 50, 50 ), 30, cv::Scalar( 255, 255, 255 ), -1, cv::LINE_AA, false );
ft2->putText( image, "ABCDEFG", cv::Point( 50, 100 ), 30, cv::Scalar( 255, 255, 255 ), -1, cv::LINE_AA, false );
ft2->putText( image, "あいうえお", cv::Point( 50, 150 ), 30, cv::Scalar( 255, 255, 255 ), -1, cv::LINE_AA, false );
cv::imshow( "freetype", image );
cv::waitKey( 0 );
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment