type
status
date
slug
summary
tags
category
icon
password
参考课程:
【黑马程序员 OpenCV入门教程】
@ZZHow(ZZHow1024)
2.1图像的基础操作
- 读取图像
- 参数
- 要读取的图像路径
- 读取方式的标志
- cv.IMREAD_COLOR:以彩色模式加载图像,任何图像的透明度都将被忽略。(默认参数)(-1)
- cv.IMREAD_GRAYSCALE:以灰度模式加载图像(0)
- cv.IMREAD_UNCHANGED:包括 alpha 通道的加载图像模式(1)
- 注意:如果加载的路径有错误,不会报错,会返回一个 None 值
- 显示图像
- 参数
- 显示图像的窗口名称,以字符串类型表示
- 要加载的图像
- 注意:在调用 OpenCV 的显示图像的 API 后,要调用 cv.waitKey 给图像绘制留下时间
- 案例:以灰度模式读取图像,分别用 OpenCV 和 matplotlib 的 API 显示图像,最后保存灰度图像
- 案例演示:image_io.py
- 绘制几何图形
- 绘制直线
- 参数
- image:要绘制直线的图像
- start, end:直线的起点和终点
- color:线条的颜色
- thickness:线条宽度
- 绘制矩形
- 参数
- image:要绘制矩形的图像
- leftupper, rightdown:矩形的左上角和右下角坐标
- color:线条的颜色
- thickness:线条宽度
- 绘制圆形
- 参数
- img:要绘制圆形的图像
- centerpoint, r:圆心和半径
- color:线条的颜色
- thickness:线条宽度,为 -1 时生成闭合图案并填充颜色
- 向图像中添加文字
- 参数
- image:图像
- text:要写入的文本数据
- station:文本的放置位置
- font:字体
- fontsize:字体大小
- color:文本颜色
- thickness:线条宽度
- linetype:
LINE_8
(默认)、LINE_4
、LINE_AA
- 案例:生成一个全黑的图像,然后在里面绘制图像(直线、矩形 和 圆形)并添加文字(OpenCV)
- 案例演示:draw_graphics.py
- 获取并修改图像中的像素点
- 可以通过行和列的坐标值获取该像素点的像素值
- 对于 BGR 图像,它返回一个蓝,绿,红值的数组
- 对于灰度图像,仅返回相应的强度值
- 案例演示:modify_pixels.ipynb
- 获取图像的属性
- 图像属性包括形状(行数、列数 和 通道数)、数据类型、大小(像素数)等
- 案例演示:get_image_properties.ipynb
属性 | API |
形状 | image.shape |
数据类型 | image.dtype |
图像大小 | image.size |
- 图像通道的拆分与合并
- 有时需要将 BGR 图像分割为单个通道
- 有时需要将单独的通道合并成 BGR 图像
- 色彩空间的改变
- OpenCV 中有 150 多种颜色空间转换方法
- 最广泛使用的转换方法有两种,BGR → Gray 和 BGR → HSV
- 参数
- image:进行颜色空间转换的图像
- flag:转换类型
- cv.COLOR_BGR2GRAY:BGR → Gray
- cv.COLOR_BGR2HSV:BGR → HSV
2.2算数操作
- 图像的加法
- 可以使用 OpenCV 的
cv2.add()
函数把两幅图像相加,或者可以简单地通过 NumPy 操作添加两个图像,如res = image1 +image2
- 两个图像应该具有相同的大小和类型,或者第二个图像可以是标量值
- 注意:OpenCV 加法和 NumPy 加法之间存在差异
- OpenCV 的加法是饱和操作
- NumPy 的加法是模运算
- 图像的混合
- 其实也是加法,但是两幅图像的权重不同,这就会给人一种混合或者透明的感觉
- 图像混合的计算公式:
- 通过修改 的值 (0~1),可以实现非常炫酷的混合
- 将两幅图混合在一起
- 第一幅图的权重是 ,第二幅图的权重是
- 函数
cv2.addWeighted()
可以按下面的公式对图片进行混合操作: