質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

4327閲覧

PythonのOpenCVでのget text sizeについて

qkazooing

総合スコア22

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/09/05 10:02

指定した文字列に対応した長さを囲む長方形を作ろうと思い、OpenCVで作成しようと考えました。
pythonで書きたいのですが、公式サンプルではおそらくC++で書かれていてよくわかりませんでした。

// ベースラインを表示するために "y" を利用します. string text = "Funny text inside the box"; int fontFace = FONT_HERSHEY_SCRIPT_SIMPLEX; double fontScale = 2; int thickness = 3; Mat img(600, 800, CV_8UC3, Scalar::all(0)); int baseline=0; Size textSize = getTextSize(text, fontFace, fontScale, thickness, &baseline); baseline += thickness; // テキストをセンタリングします. Point textOrg((img.cols - textSize.width)/2, (img.rows + textSize.height)/2); // 矩形を描画します. rectangle(img, textOrg + Point(0, baseline), textOrg + Point(textSize.width, -textSize.height), Scalar(0,0,255)); // ... 次に,まずベースラインを描画します. line(img, textOrg + Point(0, thickness), textOrg + Point(textSize.width, thickness), Scalar(0, 0, 255)); // 続いてテキスト自体を描画します. putText(img, text, textOrg, fontFace, fontScale, Scalar::all(255), thickness, 8);

まずgetTextSizeで文字列の幅と高さを求めるそうなのですが、&baselineの記述がよくわかりません。
pythonではどのような意味になるのでしょうか。
サイトには文字列の最下点から見たベースラインの y 座標とかいてあるのですが、なにになるのでしょうか・・・

参考
OpenCV公式サイト

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Python に書き換えると、文字を囲む矩形を描画するには以下のようになります。

baseline などの詳細は以下参照

OpenCV - 長方形、円、線、ポリゴンなどを描画する方法

python

1import cv2 2import numpy as np 3 4img = np.zeros((100, 300, 3), dtype=np.uint8) 5 6text = "Teratail" # 描画する文字 7fontface = cv2.FONT_HERSHEY_SIMPLEX # フォントの種類 8fontscale = 1.0 # 文字のスケール 9thickness = 2 # 文字の太さ 10x, y = 50, 50 # ベースラインの始点 11 12# 文字列を描画した際の大きさを取得する。 13(w, h), baseline = cv2.getTextSize(text, fontface, fontscale, thickness) 14 15# 文字を囲む矩形を描画する。 16cv2.rectangle(img, (x, y - h), (x + w, y + baseline), (0, 0, 255), thickness) 17 18# 文字列を描画する。 19cv2.putText(img, text, (x, y), fontface, fontscale, (255, 255, 255), thickness) 20 21cv2.imwrite("output.png", img)

イメージ説明

投稿2020/09/05 11:47

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問