opencv
のプロジェクトがあり、フレームでcv2.putText()
を使用してテキストを表示しています。現在は以下のようになっています:
左上にあるように、テキストは存在しますが、はっきりと見えません。テキストを適切に表示するために背景を黒にすることは可能ですか?以下の画像のようなもの:
黒い背景がフレームの右側までカバーしていても問題ありません。以下は、フレームにテキストを配置するために使用しているコードです。
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で利用可能なビルド済みのメソッド/ライブラリはありますか?誰かが良い方法を提案してくれませんか?
ビルド済みのメソッドはありませんが、簡単な方法は cv2.rectangle
+ cv2.putText
を使用することです。あなたがしなければならないのは、画像上に黒い長方形を描き、続いてテキストを配置することだけです。長方形の大きさの大きさによって、x,y,w,h
パラメータを調整できます。次に例を示します。
入力画像:
結果:
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()
Python OpenCV。
入力:
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()
背景色画像のテキスト:
入力画像のテキスト:
追伸トリミングするときに必要に応じて、境界の長方形(x、y、w、h)の値を調整して、パディングを追加できます。