cmake下载地址:https://cmake.org/download/
opencv下载地址:https://opencv.org/releases/
opencv_contrib下载地址:https://github.com/opencv/opencv_contrib/releases
由于国内访问GitHub不稳定,使用Github下载的源码编译会出现很多资源下载失败而导致编译失败的问题。所以可以使用国内的opencv镜像,地址为:
opencv : https://gitcode.net/opencv/opencv
opencv_contrib:https://gitcode.net/opencv/opencv_contrib
详细说明参考此文章:《下载不再卡顿,OpenCV中国镜像启用》
其中,opencv_contrib的版本要与opencv的版本一致
。
本文编写时,最新版本为opencv4.5.2,因此我下载的版本为opencv4.5.2和opencv_contrib4.5.2
双击下载的opencv的exe文件,执行的是解压操作,选择一个目录解压即可,然后把opencv_contrib也解压到相同的目录:
opencv本身自带编译了visual studio 2015 和 visual studio 2017 版本的64位的库,在build目录中可以直接使用了。
但是如果要32位的库,或者需要SURF、SIFT等算法,就需要编译opencv_contrib库
若要使用putText在图片中添加中文汉字,则需要编译freetype和harfbuzz,若没有中文汉字的需求,则这个目录下的内容忽略,直接跳到目录 -> 3.编译Opencv
下载pkg-config: https://sourceforge.net/projects/pkgconfiglite/
下载freetype: https://download.savannah.gnu.org/releases/freetype/
下载harfbuzz: https://github.com/harfbuzz/harfbuzz
解压后添加bin目录到系统PATH环境变量
再次Configure, 然后点击Generate, 完成后,点击 Open Project 按钮,打开VS,编译。
VS里ALL_BUILD, INSTALL. 会在构建文件夹的install目录下生成所需的include和lib
2021/04/30修改,上图中 FREETYPE_INCLUDE_DIR_ft2build 应填 D:/DevelopmentTools/freetype-2.10.0/install/include, 上图少了include目录
填上freetype的相关路径,再次Configure, 然后点击Generate, 完成后,点击 Open Project 按钮,打开VS,编译。
VS里ALL_BUILD, INSTALL. 会在构建文件夹的install目录下生成所需的include,和lib
编译的lib,debug和release的名字是一样的,可以先把Debug和Release都编译出来,先编译Debug版本的INSTALL,等opencv的Debug版本编译完了,再编译Release版本的INSTALL,然后编译Release版本的Opencv
编译完成后, 设置环境变量
改为如下:
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()
点击finish后,开始configure,如果有很多爆红的地方,可以参考文章《opencv_contrib安装笔记》。
或者使用国内opencv镜像进行编译(爆红的地方都是下载失败的问题,由于github在国内访问困难,使用国内gitcode仓库的代码库,会自动从国内镜像下载。具体参考此文章:《下载不再卡顿,OpenCV中国镜像启用》
爆红解决后,配置config:
(1)勾选 OPENCV_ENABLE_NONFREE
项,否则在运行SIFT、SURF等函数时会报错
(2)设置 OPENCV_EXTRA_MODULES_PATH
项,填入opencv-contrib的目录下的modules目录
(3)勾选 BUILD_opencv_world
项,如果需要把生成的opencv的lib和dll包含在一个文件opencv_world.lib和opencv_world.dll内则需要勾选,否则不用勾选
(4)勾选 WITH_FREETYPE
项,支持中文文字putText,但是要支持这一项,则必须先编译freetype和harfbuzz
(5)如果需要支持freetype,则需要在Opencv的Cmake配置中加入freetype的相关路径
2021/04/30修改,上图中 FREETYPE_INCLUDE_DIR_ft2build 应填 D:/DevelopmentTools/freetype-2.10.0/install/include, 上图少了include目录
搜索一下harfbuzz,还要填入harfbuzz的相关目录和库文件,如下图图中的路径和上面的不一样,因为这是后面又补充的)
填好后,再次在Cmake界面,点击 configure, 确定没报错后,点击 Generate,最后点击 Open Project,打开Visual studio,找到 ALL_BUILD 右键Build, 等待编译完成后, 找到 INSTALL 右键 Build
#include "opencv2/opencv.hpp"
#include "opencv2/freetype.hpp"
#include
int main()
{
cv::Mat img(200, 300, CV_8UC3, cv::Scalar(255, 255, 255));
cv::Ptr<cv::freetype::FreeType2> freeType;
freeType = cv::freetype::createFreeType2();
freeType->loadFontData("C:/Windows/Fonts/simsun.ttc", 0); // 加载字体文件,宋体
// 在图片中显示带中文的文字
freeType->putText(img, "测试 hello world!", cv::Point(10, 30), 20, cv::Scalar(255, 0, 0), 1, 8, true);
cv::imshow("test", img);
cv::waitKey(0);
return 0;
}
执行显示效果:
但是,在Visual Studio工程中编译上面c++代码,运行显示的结果中没有“测试”这两个汉字,只有 “hello world”, 因为Visual Studio的文件编码格式不是utf-8, 需要这样设置:
(1)修改文件编码格式,在VS工具栏中选择File -> Advanced Save Options(高级保存选项),如果你的VS中找不到Advanced Save Options,查看文章《Windows下编译OpenCV带Tesseract OCR》中的 2.2.1.1 VS中添加修改文件格式的命令
部分的方法进行设置
(2)在工程属性,C/C++ -> Command Line 里面添加一句:%(AdditionalOptions) /source-charset:utf-8 /execution-charset:utf-8
上面设置好后,编译运行就能显示汉字了。
下面是vs2017编译好的32位 opencv :
(1)opencv-4.5.4-带opencv_contrib和freetype-vs2017_x86版本
(2)opencv-4.5.2-带opencv_contrib和freetype-vs2017_x86版本
[1] https://yangshun.win/blogs/75d6773c/#freetype-%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE
[2] https://www.cnblogs.com/touch-skyer/p/14343791.html
[3] https://zhuanlan.zhihu.com/p/357042606
[4] https://zhuanlan.zhihu.com/p/357042606
[5] 下载不再卡顿,OpenCV中国镜像启用