2016-05-12 15 views
6

Czy możemy załadować niestandardową czcionkę TrueType i użyć jej z funkcją cv2.putText?Załaduj czcionkę TrueType do OpenCV

font = cv2.FONT_HERSHEY_SIMPLEX 
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA) 
+1

Nie, z 'cv2.putText' można używać tylko mały podzbiór czcionek Hershey, które są dołączone OpenCV. A co z wykorzystaniem [obsługi TrueType z Pillow] (http://pillow.readthedocs.io/en/2.8.1/reference/ImageFont.html)? Istnieją przykłady, jak radzić sobie z konwersjami PIL OpenCV <-> tutaj w Stack Overflow. –

Odpowiedz

1

W OpenCV obsługiwane jest tylko podzbiór czcionek Hershey.

W opencv2/core.hpp można znaleźć to wyliczenie HersheyFonts.

//! Only a subset of Hershey fonts 
enum HersheyFonts { 
    FONT_HERSHEY_SIMPLEX  = 0, //!< normal size sans-serif font 
    FONT_HERSHEY_PLAIN   = 1, //!< small size sans-serif font 
    FONT_HERSHEY_DUPLEX   = 2, //!< normal size sans-serif font (more complex than FONT_HERSHEY_SIMPLEX) 
    FONT_HERSHEY_COMPLEX  = 3, //!< normal size serif font 
    FONT_HERSHEY_TRIPLEX  = 4, //!< normal size serif font (more complex than FONT_HERSHEY_COMPLEX) 
    FONT_HERSHEY_COMPLEX_SMALL = 5, //!< smaller version of FONT_HERSHEY_COMPLEX 
    FONT_HERSHEY_SCRIPT_SIMPLEX = 6, //!< hand-writing style font 
    FONT_HERSHEY_SCRIPT_COMPLEX = 7, //!< more complex variant of FONT_HERSHEY_SCRIPT_SIMPLEX 
    FONT_ITALIC     = 16 //!< flag for italic font 
}; 

Możesz wypróbować PIL.ImageFont, jeśli chcesz użyć niestandardowej czcionki.

Podstawowym przykładem jest przedstawiony tutaj:

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

## Make canvas and set the color 
img = np.zeros((200,400,3),np.uint8) 
b,g,r,a = 0,255,0,0 

## Use cv2.FONT_HERSHEY_XXX to write English. 
text = time.strftime("%Y/%m/%d %H:%M:%S %Z", time.localtime()) 
cv2.putText(img, text, (50,50), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (b,g,r), 1, cv2.LINE_AA) 

## Use simsum.ttc to write Chinese. 
fontpath = "./simsun.ttc"  
font = ImageFont.truetype(fontpath, 32) 
img_pil = Image.fromarray(img) 
draw = ImageDraw.Draw(img_pil) 
draw.text((50, 100), "国庆节/中秋节 快乐!", font = font, fill = (b, g, r, a)) 
img = np.array(img_pil) 

## Display 
cv2.imshow("res", img);cv2.waitKey();cv2.destroyAllWindows() 
cv2.imwrite("res.png", img) 

enter image description here