OpenCVの文字列描画 フォントの使い方解説
OpenCVの文字列描画で指定できるフォントの一覧を紹介
画像処理のアプリケーションを作る上で画像上に文字列を表示する機会があると思います。
その際に有名な画像処理ライブラリであるOpenCVには文字列を描画するための関数であるcv2.putTextが用意されています。
その文字列を使う事で左の画像に右の画像のような文字列を画像上に追加する事ができます。
ちなみに今回使用しているのは2020年10月時点で非常に人気のあるコンテンツであるVTuberの一人である常闇トワ様です。
今回はそのcv2.putTextを紹介していこうと思います。
※文字列以外の図形描画はこちらの記事を参考にしてください。
OpenCVの文字列描画プログラミング cv2.putTextを解説
OpenCVを使う事で画像に文字列を追加する処理を簡単なプログラミングで実装する事ができます。
先ほどの画像を作成したのは以下のコードだけで実装できています。
import cv2
img = cv2.imread('C:/Temp/towa.jpg') #これでimgに画像データが入る
# 指定した文字列を特定座標から表示する 表示方式は指定可能
cv2.putText(img,"towa sama",(150,50),cv2.FONT_HERSHEY_SIMPLEX,1,(0,0,255),4)
cv2.imwrite('C:/Temp/towa_TextAdd.jpg',img) #画像を保存
非常に簡単ですよね。ちなみにC:\Tempフォルダにtowa.jpgという画像を用意しておかないとエラーが出ますので気を付けてください。
また,cv2.putTextによって文字列を描画していますが,どういったパラメータを指定できるかを解説します。
cv2.putText(img,text,StartPoint,Font,FontScale,color,thickness)
- img・・・書き込み対象の画像データ
- text・・・書き込む文字列
- StartPoint・・・文字列を描画する際の座標 ただし座標は文字列の左下部分になるため注意が必要
- Font・・・フォントの種類。以下で解説
- FontScale・・・フォントの基本サイズに対する倍率 この値で文字サイズを微調整する
- color・・・BGR(青,緑,赤)の比率でそれぞれ0~255で指定した色強度を設定できる
- thickness・・・線の太さ
こんな感じで指定できます。このFontの部分を以下の候補の中から指定できます。
- cv2.FONT_HERSHEY_SIMPLEX・・・サンセリフフォント(通常サイズ) ←上記で使用
- cv2.FONT_HERSHEY_PLAIN・・・サンセリフフォント(小さいサイズ)
- cv2.FONT_HERSHEY_DUPLEX・・・サンセリフフォント(通常サイズでSIMPLEXより複雑な描画)
- cv2.FONT_HERSHEY_COMPLEX・・・セリフフォント(通常サイズ)
- cv2.FONT_HERSHEY_TRIPLEX・・・セリフフォント(通常サイズ,COMPLEXより複雑な描画)
- cv2.FONT_HERSHEY_COMPLEX_SMALL・・・セリフフォント(通常サイズより小さい文字列)
- cv2.FONT_HERSHEY_SCRIPT_SIMPLEX・・・手書き風フォント
- cv2.FONT_HERSHEY_SCRIPT_COMPLEX・・・手書き風フォント(SIMPLEXTより複雑な描画)
- cv2.FONT_ITALIC・・・イタリック体
これらのフォントを指定するとどんな見え方になるかを説明していきます。
cv2.FONT_HERSHEY_PLAIN サンセリフフォントの小さいサイズ
まずはcv2.FONT_HERSHEY_PLAINを使った場合を説明します。これは最も基本となるcv2.FONT_HERSHEY_SIMPLEXから文字の形式は同じにして小文字化された文字列を表示します。
左側が基本となるcv2.FONT_HERSHEY_SIMPLEX(サンセリフフォント通常サイズ)で,右側がcv2.FONT_HERSHEY_PLAIN(サンセリフフォントの小文字サイズ)です。結構明確に文字の大きさが分かれましたね。正直右側は何を書いているのか判別するのが難しいくらいです。画像によって使い分けるのがいいですね。ちなみに文字の微調整はcv2.putTextの引数であるFontScaleを変更する事で可能です。
cv2.FONT_HERSHEY_DUPLEX サンセリフフォント(通常サイズ複雑描写)
次にcv2.FONT_HERSHEY_DUPLEXを使った場合を説明します。これは最も基本となるcv2.FONT_HERSHEY_SIMPLEXから文字の表示が複雑化した形式を出してくれます。
左側が基本となるcv2.FONT_HERSHEY_SIMPLEX(サンセリフフォント通常サイズ)で,右側がcv2.FONT_HERSHEY_DUPLEX(サンセリフフォントの複雑描写)です。私も見たときに「何か違う??」と思いましたが,tの形が違っていたり,若干文字の描き方が変わっていますね。
cv2.FONT_HERSHEY_COMPLEX セリフフォント(通常サイズ)
次にcv2.FONT_HERSHEY_COMPLEXを使った場合を説明します。このフォント指定からサンセリフフォントからセリフフォントになります。正直試すのは実は初めてで,cv2.putTextを使う場合はサンセリフフォントしか使った事がないためちょっと楽しみです。
はい,あんまり変わらないですね。ちょっとがっかりしています。少しサンセリフフォントに比べると線が太いですねぇ。ただ思っていたよりも違いがないうえにサンセリフのほうが線が細くて見やすいですね。
cv2.FONT_HERSHEY_TRIPLEX セリフフォント(通常サイズ複雑描写)
次にcv2.FONT_HERSHEY_TRIPLEXを使った場合を説明します。セリフフォントに対して若干複雑な描写が出来るそうです。ただここまでの変化量からあんまり劇的な違いはないような気がしますね。
やっぱり大差ないですね。基本的に複雑描写になると少し線が太くなるんですかね。sの字とか若干潰れてますもんね。特にこだわりがないならサンセリフの通常サイズで問題ないと思われます。
cv2.FONT_HERSHEY_SCRIPT_SIMPLEX 手書きフォント
次にcv2.FONT_HERSHEY_SCRIPT_SIMPLEXを使った場合を説明します。ここからサンセリフとセリフフォントとはまた異なった手書き文字風のフォントになるようです。どのような変化が出てくるのか楽しみです。
おぉ!かなり大きく変わりましたね! 手書き感がかなり出されていておしゃれです。私は製造業にいるのであまり使う機会はなさそうですが,おしゃれなアプリケーションを作りたいなと思った時に重宝できるかも知れませんね。
cv2.FONT_ITALIC イタリックフォント
最後にcv2.FONT_ITALICを使った場合を説明します。はじめてつかうイタリック書体なのでどういう風になるのか確認していこうと思います。
何か変わりましたかね?正直変化量が小さすぎて変わっているとしても使う理由がないですね・・・。
一番期待していたのにここまで差がないとは・・・。
cv2.putTextのフォントまとめ
今回の記事ではOpenCVのcv2.putTextで指定できるフォントについて調べていきましたが如何だったでしょうか。
正直手書き文字以外は「ほとんど変わらないな・・・」という感想を持ったと思います。私もそう思いました。
基本的にアプリケーション上でこのフォントを使う場合はほとんどの場合で基本形のサンセリフフォントを使うと思います。
他にも画像処理やOpenCVの使い方などについて説明している記事を投稿しているので是非他の記事も見ていってください。