web-dev-qa-db-ja.com

python opencv2を使用してWindowsの画像にテキストを書き込む方法

画像にテキストを入れたいです。私は次のようにコードを書いています:

cv2.putText(image,"Hello World!!!", (x,y), cv2.CV_FONT_HERSHEY_SIMPLEX, 2, 255)

「モジュール」オブジェクトには属性「CV_FONT_HERSHEY_SIMPLEX」がないというエラーが表示されます

クエリ上記のフォントタイプを使用できませんか?インターネットで検索しましたが、initcvのOpencv C++に関連する構文のみが見つかりました。次に、putTextを使用して、フォントタイプをパラメーターとして渡すことを考えました。しかし、それは私のために働いていません。

助言がありますか?

44

このコードはcv2.putTextを使用して画像にテキストをオーバーレイします。 NumPyとOpenCVがインストールされている必要があります。

import numpy as np
import cv2

# Create a black image
img = np.zeros((512,512,3), np.uint8)

# Write some Text

font                   = cv2.FONT_HERSHEY_SIMPLEX
bottomLeftCornerOfText = (10,500)
fontScale              = 1
fontColor              = (255,255,255)
lineType               = 2

cv2.putText(img,'Hello World!', 
    bottomLeftCornerOfText, 
    font, 
    fontScale,
    fontColor,
    lineType)

#Display the image
cv2.imshow("img",img)

#Save image
cv2.imwrite("out.jpg", img)

cv2.waitKey(0)
65
Vinay Vemula

CV_FONT_HERSHEY_SIMPLEXはcv(1)にありましたか? cv2 "FONT"で利用できるものは次のとおりです。

FONT_HERSHEY_COMPLEX
FONT_HERSHEY_COMPLEX_SMALL
FONT_HERSHEY_DUPLEX
FONT_HERSHEY_PLAIN
FONT_HERSHEY_SCRIPT_COMPLEX
FONT_HERSHEY_SCRIPT_SIMPLEX
FONT_HERSHEY_SIMPLEX
FONT_HERSHEY_TRIPLEX
FONT_ITALIC

「CV_」をドロップするとうまくいくようです。

cv2.putText(image,"Hello World!!!", (x,y), cv2.FONT_HERSHEY_SIMPLEX, 2, 255)
27
Andenthal

これは確かに少し厄介な問題です。 python 2.x.xの場合:

cv2.CV_FONT_HERSHEY_SIMPLEX

Python 3.x.xの場合:

cv2.FONT_HERSHEY_SIMPLEX

オートコンプリート環境(pyscripterやscipyなど)を使用することをお勧めします。サンプルコードを検索する場合は、同じバージョンのPythonを使用していることを確認してください(コードの変更を確認していない場合)。

9
Roeffus

同様の問題がありました。 OpenCVの限定フォントと比較して、pythonでPILライブラリを使用して、特定のフォントでテキストを描画することをお勧めします。 PILを使用すると、システムにインストールされている任意のフォントを選択できます。

from PIL import ImageFont, ImageDraw, Image
import numpy as np
import cv2

image = cv2.imread("lena.png")

# Convert to PIL Image
cv2_im_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
pil_im = Image.fromarray(cv2_im_rgb)

draw = ImageDraw.Draw(pil_im)

# Choose a font
font = ImageFont.truetype("Roboto-Regular.ttf", 50)

# Draw the text
draw.text((0, 0), "Your Text Here", font=font)

# Save the image
cv2_im_processed = cv2.cvtColor(np.array(pil_im), cv2.COLOR_RGB2BGR)
cv2.imwrite("result.png", cv2_im_processed)

result.png

6
DollarAkshay

パラメータラベル付きのコードを次に示します

def draw_text(self, frame, text, x, y, color=BGR_COMMON['green'], thickness=1.3, size=0.3,):
    if x is not None and y is not None:
        cv2.putText(
            frame, text, (int(x), int(y)), cv2.FONT_HERSHEY_SIMPLEX, size, color, thickness)

フォント名については、このスレッドの別の回答をご覧ください。

@Roeffusによる回答からの抜粋

これは確かに少し厄介な問題です。 python 2.x.xの場合:

cv2.CV_FONT_HERSHEY_SIMPLEXおよびPython 3.x.xの場合:

cv2.FONT_HERSHEY_SIMPLEX

詳細については、こちらをご覧ください http://www.programcreek.com/python/example/83399/cv2.putText

1
Ravinder Payal

上記の例では、ソリューションは次のようになります。

import PILasOPENCV as Image
import PILasOPENCV as ImageDraw
import PILasOPENCV as ImageFont
# from PIL import ImageFont, ImageDraw, Image
import numpy as np
import cv2

image = cv2.imread("lena.jpg")

# Convert to PIL Image
cv2_im_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
pil_im = Image.fromarray(cv2_im_rgb)

draw = ImageDraw.Draw(pil_im)

# Choose a font
font = ImageFont.truetype("Roboto-Regular.ttf", 40)

# Draw the text
draw.text((0, 0), "Your Text Here", font=font)

# Save the image
cv2_im_processed = pil_im.getim()
cv2.imshow("cv2_im_processed", cv2_im_processed)
cv2.waitKey()
0
bunkus