python opencv PIL輸入可選轉的中文

2021-08-31 16:19:45 字數 2910 閱讀 3399

經常需要再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 引用中的語法關係圖使用下列規則。規範...