Skip to content

Latest commit

 

History

History
264 lines (199 loc) · 6.5 KB

597-1189944-绘制文字.sy.md

File metadata and controls

264 lines (199 loc) · 6.5 KB
show version enable_checker
step
1.0
true

opencv

回忆

  • 上次安装了opencv
    • 并且打开了图片
    • 查看了图片
    • 还另存了图片
  • 图片的本质是什么呢?
  • 为什么输出的时候会输出一个三维数组呢?🤔

图片的输出

import cv2 
image = cv2.imread("/home/shiyanlou/kun1.png")
print(image)
  • 执行结果

图片描述

  • 看起来像是一个三维的列表
    • 这如何理解呢?

观察类型

import cv2
image = cv2.imread("/home/shiyanlou/kun1.png")
print(type(image))
  • 运行结果

图片描述

  • 这是一个numpy.ndarray

ndarray

  • ndarray
    • n-demensional array

图片描述

  • 同质、固定大小的n纬数组

Attribute

import cv2
image = cv2.imread("/home/shiyanlou/kun1.png")
print("ndim:",image.ndim)
print("shape:",image.shape)
print("size:",image.size)
print("dtype:",image.dtype)
print("nbytes:",image.nbytes)
  • 结果

图片描述

  • 三维数组
    • 各维的数字
    • 数据类型
    • 整体容量
  • 可以做一个空白的 图片吗?

空白图片

import numpy as np
import cv2
canvas = np.zeros((300,300,3), np.uint8)
cv2.imshow("canvas",canvas)
cv2.waitKey()
cv2.destroyAllWindows()
  • 得到一个纯黑的画布

图片描述

  • 画布具体的数值如何呢?

具体数值

import numpy as np
import cv2
canvas = np.zeros((300,300,3), np.uint8)
print(canvas)
cv2.imshow("canvas",canvas)
cv2.waitKey()
cv2.destroyAllWindows()
  • 结果 第三维 是 三元组
    • 三个零 对应黑色

图片描述

  • 可以在这画布上面写字吗?

绘制文字

import numpy as np
import cv2
canvas = np.zeros((300,300,3), np.uint8)
cv2.putText(canvas,"oeasy",(30,80),cv2.FONT_HERSHEY_TRIPLEX,2,(0,0,255),5)
cv2.imshow("Text",canvas)
cv2.waitKey()
cv2.destroyAllWindows()
  • putText 是具体的函数
    • 这个函数参数很多
    • 具体怎么理解呢?

官网搜索

  • 百度搜索
    • opencv putText( site:opencv.org

图片描述

  • 找到 docs.opencv.org的页面

观察

图片描述

  • 这里的参数列表
    • 基于c++源文件
    • 可以借鉴
void cv::putText(
    cv::Mat& img, // 待绘制的图像
    const string& text, // 待绘制的文字
    cv::Point origin, // 文本框的左下角
    int fontFace, // 字体 (如cv::FONT_HERSHEY_PLAIN)
    double fontScale, // 尺寸因子,值越大文字越大
    cv::Scalar color, // 线条的颜色(RGB)
    int thickness = 1, // 线条宽度
    int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)
    bool bottomLeftOrigin = false // true='origin at lower left'
);

运行结果

cv2.putText(canvas,"oeasy",(30,80),cv2.FONT_HERSHEY_TRIPLEX,2,(0,0,255),5)
名称 数值 作用
Point origin (30,80) 原点位置
fontFace cv2.FONT_HERSHEY_TRIPLEX 字体
fontScale 2 尺寸因子
color (0,0,255) 颜色 红色
thickness 8 线条宽度

图片描述

设置文字字体

import numpy as np
import cv2 
from random import randint
image = np.zeros((480,640,3), np.uint8)
text = "oeasy learns to opencv"
cv2.putText(image, text, (20, 20),  cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 255),1)
cv2.putText(image, text, (20, 50),  cv2.FONT_HERSHEY_COMPLEX_SMALL, 1, (0, 255,255),1)
cv2.putText(image, text, (20, 80),  cv2.FONT_HERSHEY_DUPLEX, 1, (0, 255, 255),1)
cv2.putText(image, text, (20, 110), cv2.FONT_HERSHEY_PLAIN, 1, (0, 255, 255), 1)
cv2.putText(image, text, (20, 140), cv2.FONT_HERSHEY_SCRIPT_COMPLEX, 1, (0, 255,255),1)
cv2.putText(image, text, (20, 170), cv2.FONT_HERSHEY_SCRIPT_SIMPLEX, 1, (0, 255,255),1)
cv2.putText(image, text, (20, 200), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 255),1)
cv2.putText(image, text, (20, 230), cv2.FONT_HERSHEY_TRIPLEX, 1, (0, 255, 255),1)
cv2.imshow("PolyLines",image)
cv2.waitKey()
cv2.destroyAllWindows()
  • 结果

图片描述

字体列表

字体名称 字体说明
FONT_HERSHEY_SIMPLEX 正常大小无衬线字体
FONT_HERSHEY_PLAIN 小号无衬线字体
FONT_HERSHEY_DUPLEX 正常大小无衬线字体,比FONT_HERSHEY_SIMPLEX更复杂
FONT_HERSHEY_COMPLEX 正常大小有衬线字体
FONT_HERSHEY_TRIPLEX 正常大小有衬线字体,比FONT_HERSHEY_COMPLEX更复杂
FONT_HERSHEY_COMPLEX_SMALL FONT_HERSHEY_COMPLEX的小译本
FONT_HERSHEY_SCRIPT_SIMPLEX 手写风格字体
FONT_HERSHEY_SCRIPT_COMPLEX 手写风格字体,比FONT_HERSHEY_SCRIPT_SIMPLEX更复杂

颠倒文字

import numpy as np                                                  
import cv2                                                          
canvas = np.zeros((300,300,3), np.uint8)                            
cv2.putText(canvas,"oeasy",(30,80),cv2.FONT_HERSHEY_DUPLEX,1,(0,0,255),1,8,True)
cv2.imshow("updown",canvas)                                         
cv2.waitKey()                                                       
cv2.destroyAllWindows()
  • 运行结果

图片描述

  • 可以在图像上写字吗?

在图像上写字

图片描述

import cv2             
image = cv2.imread("/home/shiyanlou/kun1.png")
cv2.putText(image,"kun",(30,80),cv2.FONT_HERSHEY_DUPLEX,1,(0,0,255),1)
cv2.imshow("kun",image)
cv2.waitKey()          
cv2.destroyAllWindows()                           
cv2.imwrite('/home/shiyanlou/kunkun.png',image)

运行结果

图片描述

  • 写字的作用 应该就是
    • 改变 对应数组 中
    • 对应像素的值

总结

  • 可以在空白黑底图像上写字
    • 字体
    • 颜色
    • 朝向
    • 大小
    • ...都可以修改
  • 可以试试使用滚动条吗?🤔
  • 我们下次再说 👋