首页>>人工智能->OpenCV的中文乱码问题

OpenCV的中文乱码问题

时间:2023-11-29 本站 点击:0

软硬件环境

ubuntu 18.04 64bit

anaconda with python 3.6

OpenCV 3.1.0

Pillow 3.4.2

问题

opencv 中的 cv2.putText 方法可以将字符显示出来,不过遗憾的是,显示中文时会出现乱码。putText 方法只支持 ascii 中的一个很小的子集,而不是 unicode 或者是 utf 字符。找了找源码,可以看出一点端倪 /home/xugaoxiang/anaconda3/pkgs/opencv3-3.1.0-py36_0/include/opencv2/core.hpp,其它环境路径会有差异,可以通过文件名来查找。默认情况下,opencv 使用的是 hershey 这种字体,而且不支持自定义字体。

//!OnlyasubsetofHersheyfonts//!<http://sources.isc.org/utils/misc/hershey-font.txt>aresupportedenumHersheyFonts{FONT_HERSHEY_SIMPLEX=0,//!<normalsizesans-seriffontFONT_HERSHEY_PLAIN=1,//!<smallsizesans-seriffontFONT_HERSHEY_DUPLEX=2,//!<normalsizesans-seriffont(morecomplexthanFONT_HERSHEY_SIMPLEX)FONT_HERSHEY_COMPLEX=3,//!<normalsizeseriffontFONT_HERSHEY_TRIPLEX=4,//!<normalsizeseriffont(morecomplexthanFONT_HERSHEY_COMPLEX)FONT_HERSHEY_COMPLEX_SMALL=5,//!<smallerversionofFONT_HERSHEY_COMPLEXFONT_HERSHEY_SCRIPT_SIMPLEX=6,//!<hand-writingstylefontFONT_HERSHEY_SCRIPT_COMPLEX=7,//!<morecomplexvariantofFONT_HERSHEY_SCRIPT_SIMPLEXFONT_ITALIC=16//!<flagforitalicfont};

代码实践

既然官方不支持,我们就找其它的方法,图片处理的话,第一感觉就是能不能用 Pillow 这个库,果然经过一番的查找资料(详细的请见参考资料),把乱码的问题给解决了

#!/usr/bin/envpython#-*-coding:utf-8-*-#@Date:2018-08-1514:05:21#@Author:xugaoxiang(xugx.ai@gmail.com)#@Link:link#@Version:1.0.0#-*-coding:utf-8-*-importcv2importnumpyfromPILimportImage,ImageDraw,ImageFontif__name__=='__main__':#opencv读取本地图片文件,数据类型是numpy.ndarrayimg_OpenCV=cv2.imread('dj.jpeg')#将opencv图像格式转换成PIL格式,数据类型是PIL.Image.Imageimg_PIL=Image.fromarray(cv2.cvtColor(img_OpenCV,cv2.COLOR_BGR2RGB))#字体,默认的路径/usr/share/fonts/opentype/noto/NotoSansCJK-Black.ttc,我把它拷贝过来了font=ImageFont.truetype('NotoSansCJK-Black.ttc',26)#字体颜色fillColor=(0,0,255)#文字输出位置position=(50,50)#输出内容str='\t\t\t\t\t\t\t\t\t\t\t\t我的独立博客:\nhttps://xugaoxiang.com'draw=ImageDraw.Draw(img_PIL)draw.text(position,str,font=font,fill=fillColor)#转换回OpenCV格式img_OpenCV=cv2.cvtColor(numpy.asarray(img_PIL),cv2.COLOR_RGB2BGR)#在窗口中显示cv2.imshow("image",img_OpenCV)whileTrue:key=cv2.waitKey(1)&0xFFifkey==ord('q'):breakcv2.destroyAllWindows()

执行效果如下:

参考资料

http://pillow.readthedocs.io/en/2.8.1/reference/ImageFont.html


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/AI/1075.html