經常需要再opencv中輸入中文, 有的時候還需要旋轉.
然而, 中文和旋轉都不是沒有原生介面, 需要另想辦法.
pil支援unicode字元, 所以將opencv影象換到pil中.所謂的轉換就是更換資料型別以及bgr和rgb的互換.
解決了中文後, pil有沒有原生的旋轉字元的介面, 所以要先建立乙個臨時image, 在上面渲染字型後旋轉整個影象再貼到原來的圖上.
這裡有幾個小技巧.
import cv2
from pil import image, imagedraw, imagefont
# -*- coding: utf-8 -*-
import cv2
import numpy as np
from pil import image, imagedraw, imagefont,imageops
defputtext
(img, text,position,size,angle,fillcolor)
: img_pil = image.fromarray(cv2.cvtcolor(img_opencv, cv2.color_bgr2rgb)
) margin =
10 font = imagefont.truetype(
'sourcehanserifsc-bold.otf'
, size)
text_size = imagedraw.draw(image.new(
"l",
(200
,200))
).textsize(text=text,font=font)
#先建立任意draw實體來獲取textsize, 這裡的輸入尺寸沒有限制
text_size =
tuple
(np.add(text_size,
(margin,margin)))
# 加一點margin防止邊緣字型被裁剪
txt = image.new(
"l", text_size)
draw = imagedraw.draw(txt)
draw.text((0
,0), text, font=font, fill=
255)
w = txt.rotate(angle,expand=1)
#expand=1保證旋轉後字型仍然完整
img_pil.paste(imageops.colorize(w,(0
,0,0
,0), fillcolor)
,position,w)
#w是掩碼, 不加的話會出現黑底框
"我很帥",(
輸出效果
在手動建立numpy陣列進行cv2.cvtcolor的時候不注意的話回報錯.如下
import cv2
import numpy as np
imgbgr = np.zeros((20
,20,3
))imgrgb = cv2.cvtcolor(imgbgr, cv2.color_bgr2rgb)
報錯如下:
traceback (most recent call last):
file "test.py", line 4, in imgrgb = cv2.cvtcolor(imgbgr, cv2.color_bgr2rgb)
cv2.error: opencv(3.4.3) /io/opencv/modules/imgproc/src/color.hpp:257: error: (-2:unspecified error) in function 'cv::cvthelper::cvthelper(cv::inputarray, cv::outputarray, int) [with vscn = cv::set<3, 4>; vdcn = cv::set<3, 4>; vdepth = cv::set<0, 2, 5>; cv::sizepolicy sizepolicy = (cv::sizepolicy)2u; cv::inputarray = const cv::_inputarray&; cv::outputarray = const cv::_outputarray&]'
> unsupported depth of input image:
> 'vdepth::contains(depth)'
> where
> 'depth' is 6 (cv_64f)
錯誤原因是生成的imgbgr預設是floag64, 必須手動改為uint8.即
imgbgr = np.zeros((20
,20,3
),np.uint8)
HTML中的可選標籤
要開始觀察html元素,從其根源開始比較合理,其實只是近似根源。第1章我們講到了doctype宣告,它是html文件的第乙個元素。然而,在doctype之後是html元素,它包含了文件裡所有其他的html元素,也叫作根元素。根元素是大量標籤可選的元素中的乙個 表2 3 羅列了其他可選標籤的元素 雖然...
swift中的可選型別
可選型別也是swift語言新新增的物件。主要是為了解決物件變數或常量為空的情況。在前面定義的變數和常量都不能為空。裡面必須要有值。swift中的可選型別則允許變數 常量 中沒有值 被設為nil 要注意的是,swift中的nil和oc中的nil不一樣。前者的nil表示沒有值,而後者的nil表示變數值為...
括號中的可選 必選表示
1.內的內容意思是 可寫可不寫 例如 home下就乙個list 檔案,使用ls help中的 usage ls option file 2.那就必須要在 內給出的選擇裡選乙個。3.表示必選 在資料庫中 transact sql 語法規則 transact sql 引用中的語法關係圖使用下列規則。規範...