show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次安装了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
- n-demensional array
- 同质、固定大小的n纬数组
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)
- 写字的作用 应该就是
- 改变 对应数组 中
- 对应像素的值
- 可以在空白黑底图像上写字
- 字体
- 颜色
- 朝向
- 大小
- ...都可以修改
- 可以试试使用滚动条吗?🤔
- 我们下次再说 👋