02OpenCV基本操作

参考课程:

黑马程序员 OpenCV入门教程】

https://www.bilibili.com/video/BV1Fo4y1d7JL

@ZZHow(ZZHow1024)

2.1图像的基础操作

  • 读取图像

    python 复制代码
    cv2.imread(path, flag)
    • 参数
      • 要读取的图像路径
      • 读取方式的标志
        • cv.IMREAD_COLOR:以彩色模式加载图像,任何图像的透明度都将被忽略。(默认参数)(-1)
        • cv.IMREAD_GRAYSCALE:以灰度模式加载图像(0)
        • cv.IMREAD_UNCHANGED:包括 alpha 通道的加载图像模式(1)
    • 注意:如果加载的路径有错误,不会报错,会返回一个 None 值
  • 显示图像

    python 复制代码
    cv2.imshow(title, image) # 通过 OpenCV 显示
    matplotlib.pyplot.imshow(image[:, :, ::-1]) # 通过 matplotlib 显示
    • 参数
      • 显示图像的窗口名称,以字符串类型表示
      • 要加载的图像
    • 注意:在调用 OpenCV 的显示图像的 API 后,要调用 cv.waitKey 给图像绘制留下时间
  • 案例:以灰度模式读取图像,分别用 OpenCV 和 matplotlib 的 API 显示图像,最后保存灰度图像

    python 复制代码
    import cv2 as cv
    import matplotlib.pyplot as plt
    
    image = cv.imread("image.jpg", cv.IMREAD_GRAYSCALE)
    
    cv.imshow("image", image)
    cv.waitKey(0)
    cv.destroyAllWindows()
    
    plt.imshow(image, cmap="gray")
    plt.show()
    
    cv.imwrite("image_gray.jpg", image)
  • 绘制几何图形

    • 绘制直线

      python 复制代码
      cv2.line(image, start, end, color, thickness)
      • 参数
        • image:要绘制直线的图像
        • start, end:直线的起点和终点
        • color:线条的颜色
        • thickness:线条宽度
    • 绘制矩形

      python 复制代码
      cv2.rectangle(image, leftupper, rightdown, color, thickness)
      • 参数
        • image:要绘制矩形的图像
        • leftupper, rightdown:矩形的左上角和右下角坐标
        • color:线条的颜色
        • thickness:线条宽度
    • 绘制圆形

      python 复制代码
      cv2.circle(image, centerpoint, r, color, thickness)
      • 参数
        • img:要绘制圆形的图像
        • centerpoint, r:圆心和半径
        • color:线条的颜色
        • thickness:线条宽度,为 -1 时生成闭合图案并填充颜色
    • 向图像中添加文字

      python 复制代码
      cv2.putText(image, text, station, font, fontsize, color, thickness, linetype))
      • 参数
        • image:图像
        • text:要写入的文本数据
        • station:文本的放置位置
        • font:字体
        • fontsize:字体大小
        • color:文本颜色
        • thickness:线条宽度
        • linetype:LINE_8(默认)、LINE_4LINE_AA
  • 案例:生成一个全黑的图像,然后在里面绘制图像(直线、矩形 和 圆形)并添加文字(OpenCV)

    python 复制代码
    import numpy as np
    import cv2 as cv
    import matplotlib.pyplot as plt
    
    image = np.zeros((512, 512, 3), np.uint8)
    
    cv.line(image, (0, 0), (511, 511), (0, 0, 255), 3)
    cv.rectangle(image, (0, 0), (300, 300), (255, 0, 0), 3)
    cv.circle(image, (512 >> 1, 512 >> 1), 30, (0, 255, 0), -1)
    cv.putText(image, 'OpenCV', (100, 200), cv.FONT_HERSHEY_SIMPLEX, 3, (255, 255, 255), 2, cv.LINE_AA)
    
    plt.imshow(image[:, :, ::-1])
    plt.title('OpenCV 绘制图形')
    plt.show()
  • 获取并修改图像中的像素点

    • 可以通过行和列的坐标值获取该像素点的像素值
      • 对于 BGR 图像,它返回一个蓝,绿,红值的数组
      • 对于灰度图像,仅返回相应的强度值
    python 复制代码
    px = image[10, 10] # 获取某个像素点的像素值
    blue = image[100, 100, 0] # 仅获取蓝色通道的强度值
    image[100, 100] = [255, 255, 255] # 修改某个位置的像素值
  • 获取图像的属性

    • 图像属性包括形状(行数列数通道数)数据类型大小像素数)等

      属性 API
      形状 image.shape
      数据类型 image.dtype
      图像大小 image.size
    • 案例演示:get_image_properties.ipynb

  • 图像通道的拆分与合并

    • 有时需要将 BGR 图像分割为单个通道
    • 有时需要将单独的通道合并成 BGR 图像
    python 复制代码
    b, g, r = cv.split(image) # 通道拆分
    image = cv.merge((b, g, r)) # 通道合并
  • 色彩空间的改变

    • OpenCV 中有 150 多种颜色空间转换方法
    • 最广泛使用的转换方法有两种,BGR → GrayBGR → HSV
    python 复制代码
    cv.cvtColor(image, flag)
    • 参数
      • 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 的加法是模运算
  • 图像的混合
    • 其实也是加法,但是两幅图像的权重不同,这就会给人一种混合 或者透明的感觉
    • 图像混合的计算公式:
      • g ( x ) = ( 1 − α ) f 0 ( x ) + α f 1 ( x ) g(x) = (1 - \alpha) f_0(x) + \alpha f_1(x) g(x)=(1−α)f0(x)+αf1(x)
      • 通过修改 α \alpha α 的值 (0~1),可以实现非常炫酷的混合
    • 将两幅图混合在一起
      • 第一幅图的权重是 α \alpha α,第二幅图的权重是 β \beta β
      • 函数 cv2.addWeighted() 可以按下面的公式对图片进行混合操作:
        • d i s t = α ⋅ i m a g e 1 + β ⋅ i m a g e 2 + γ dist = \alpha ⋅ image_1 + \beta ⋅ image_2 + \gamma dist=α⋅image1+β⋅image2+γ
  • 案例演示:arithmetic_operations.ipynb
相关推荐
小二·26 分钟前
Python Web 开发进阶实战:性能压测与调优 —— Locust + Prometheus + Grafana 构建高并发可观测系统
前端·python·prometheus
七牛云行业应用1 小时前
重构实录:我删了 5 家大模型 SDK,只留了 OpenAI 标准库
python·系统架构·大模型·aigc·deepseek
知乎的哥廷根数学学派2 小时前
基于多模态特征融合和可解释性深度学习的工业压缩机异常分类与预测性维护智能诊断(Python)
网络·人工智能·pytorch·python·深度学习·机器学习·分类
一人の梅雨2 小时前
亚马逊SP-API商品详情接口轻量化实战:合规与商业价值提取指南
python
wyw00002 小时前
目标检测之SSD
人工智能·目标检测·计算机视觉
袁气满满~_~4 小时前
Python数据分析学习
开发语言·笔记·python·学习
axinawang4 小时前
二、信息系统与安全--考点--浙江省高中信息技术学考(Python)
python·浙江省高中信息技术
寻星探路4 小时前
【算法专题】滑动窗口:从“无重复字符”到“字母异位词”的深度剖析
java·开发语言·c++·人工智能·python·算法·ai
Dxy12393102164 小时前
python连接minio报错:‘SSL routines‘, ‘ssl3_get_record‘, ‘wrong version number‘
开发语言·python·ssl
吨吨不打野5 小时前
CS336——2. PyTorch, resource accounting
人工智能·pytorch·python