web-dev-qa-db-ja.com

Python OpenCVを使用してcv2.putTextで黒の背景を作成する方法

opencvのプロジェクトがあり、フレームでcv2.putText()を使用してテキストを表示しています。現在は以下のようになっています:

enter image description here

左上にあるように、テキストは存在しますが、はっきりと見えません。テキストを適切に表示するために背景を黒にすることは可能ですか?以下の画像のようなもの:

enter image description here

黒い背景がフレームの右側までカバーしていても問題ありません。以下は、フレームにテキストを配置するために使用しているコードです。

cv2.putText(frame, "Data: N/A", (5, 30), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 255), 1)
cv2.putText(frame, "Room: C1", (5, 60), cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 0, 255), 1)

これを行うことができるopencvで利用可能なビルド済みのメソッド/ライブラリはありますか?誰かが良い方法を提案してくれませんか?

2
S Andrew

ビルド済みのメソッドはありませんが、簡単な方法は cv2.rectangle + cv2.putText を使用することです。あなたがしなければならないのは、画像上に黒い長方形を描き、続いてテキストを配置することだけです。長方形の大きさの大きさによって、x,y,w,hパラメータを調整できます。次に例を示します。

入力画像:

enter image description here

結果:

enter image description here

import cv2
import numpy as np

# Load image, define rectangle bounds
image = cv2.imread('1.jpg')
x,y,w,h = 0,0,175,75

# Draw black background rectangle
cv2.rectangle(image, (x, x), (x + w, y + h), (0,0,0), -1)

# Add text
cv2.putText(image, "THICC flower", (x + int(w/10),y + int(h/2)), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,255,255), 2)

# Display
cv2.imshow('image', image)
cv2.waitKey()
3
nathancy

Python OpenCV。

  • 入力を読み取る
  • 入力と同じサイズの希望の背景色の画像を作成します
  • 背景画像にテキストを描画します
  • テキスト領域の外接する四角形を取得します
  • テキスト領域を背景色の画像から入力画像のコピーにコピーします
  • 結果を保存する

入力:

enter image description here

import cv2
import numpy as np

# load image
img = cv2.imread("zelda1.jpg")

# create same size image of background color
bg_color = (0,0,0)
bg = np.full((img.shape), bg_color, dtype=np.uint8)

# draw text on bg
text_color = (0,0,255)
cv2.putText(bg, "Data: N/A", (5,30), cv2.FONT_HERSHEY_COMPLEX_SMALL, 0.75, text_color, 1)

# get bounding box
# use channel corresponding to color so that text is white on black background
x,y,w,h = cv2.boundingRect(bg[:,:,2])
print(x,y,w,h)

# copy bounding box region from bg to img
result = img.copy()
result[y:y+h, x:x+w] = bg[y:y+h, x:x+w]

# write result to disk
cv2.imwrite("zelda1_background_text.jpg", bg)
cv2.imwrite("zelda1_text.jpg", result)

# display results
cv2.imshow("TEXT", bg)
cv2.imshow("RESULT", result)
cv2.waitKey(0)
cv2.destroyAllWindows()


背景色画像のテキスト:

enter image description here

入力画像のテキスト:

enter image description here

追伸トリミングするときに必要に応じて、境界の長方形(x、y、w、h)の値を調整して、パディングを追加できます。

1
fmw42