OpenCV在Ubuntu上显示中文
Ubuntu 上搞图像,C++配 OpenCV 挺常见的,平时用putText()
写英文没啥问题,一写中文就懵了——乱码一片。这事其实蛮好的,关键在于字体。只要装上支持中文的字体,比如fonts-wqy-microhei
,在程序里指定字体路径,就能愉快写“你好,世界”了。
OpenCV 默认只认自己那几套英文字体,啥FONT_HERSHEY_SIMPLEX
、FONT_HERSHEY_COMPLEX
,通通不支持中文。所以你得换个思路,用freetype
模块,直接读系统字体文件,灵活又好用。
代码不复杂,大致流程就是:读图、加载字体、写入文字、保存图片。就这几步,熟了之后分分钟搞定。下面这段就是个简单范例:
#include <opencv2/opencv.hpp>
#include <opencv2/freetype.hpp>
using namespace cv;
using namespace std;
int main() {
Mat img = imread("image.jpg");
Ptr<freetype::FreeType2> ft2 = freetype::createFreeType2();
ft2->loadFontData("/usr/share/fonts/truetype/wqy/wqy-microhei.ttc", 0);
ft2->putText(img, "你好,世界", Point(50, 50), 30, Scalar(255,255,255), -1, LINE_AA, true);
imwrite("output.jpg", img);
return 0;
}
注意路径别写错,字体名对上就行了。如果你想找更多字体,也可以看看这些资源,opencv 为图像添加中文字体这篇就还不错,里面提到不少中文字体的适配方式。
嗯,总结一下,如果你在 Ubuntu 上搞 OpenCV,又想加点汉字进去,不用折腾系统配置,直接上freetype
模块+中文字体就行。操作简单,效果也稳。如果你项目有定制需求,可以封装成一个小工具类,复用方便,效率也高。