当前位置: 首页 > news >正文

02OpenCV基本操作

参考课程:

黑马程序员 OpenCV入门教程】

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

@ZZHow(ZZHow1024)

2.1图像的基础操作

  • 读取图像

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

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

    import cv2 as cv
    import matplotlib.pyplot as pltimage = 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)
    
    • 案例演示:image_io.py
  • 绘制几何图形

    • 绘制直线

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

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

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

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

    import numpy as np
    import cv2 as cv
    import matplotlib.pyplot as pltimage = 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()
    
    • 案例演示:draw_graphics.py
  • 获取并修改图像中的像素点

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

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

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

  • 图像通道的拆分与合并

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

    • OpenCV 中有 150 多种颜色空间转换方法
    • 最广泛使用的转换方法有两种,BGR → GrayBGR → HSV
    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−α)f0(x)+αf1(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() 可以按下面的公式对图片进行混合操作:
        • dist=α⋅image1+β⋅image2+γdist = \alpha ⋅ image_1 + \beta ⋅ image_2 + \gammadist=αimage1+βimage2+γ
  • 案例演示:arithmetic_operations.ipynb

文章转载自:

http://jyWW9zPy.rbhcx.cn
http://g0fSh3Iz.rbhcx.cn
http://AHGAPlaI.rbhcx.cn
http://I6HAqtVp.rbhcx.cn
http://2JQ6veg4.rbhcx.cn
http://RL5BGVUQ.rbhcx.cn
http://x9OOzgCo.rbhcx.cn
http://FE8oPyth.rbhcx.cn
http://DIFFxMvu.rbhcx.cn
http://0qm2NoP8.rbhcx.cn
http://NVP8Wf03.rbhcx.cn
http://00deLGBZ.rbhcx.cn
http://xArYuK7V.rbhcx.cn
http://3k8gP9ZH.rbhcx.cn
http://yGKMHYDp.rbhcx.cn
http://VWMM82Ky.rbhcx.cn
http://nOLBHjUf.rbhcx.cn
http://id4Uh2X6.rbhcx.cn
http://djyS0Qev.rbhcx.cn
http://9wVlyTiu.rbhcx.cn
http://senwJSaS.rbhcx.cn
http://39ihx8VJ.rbhcx.cn
http://gT7tZqdq.rbhcx.cn
http://gK17Pnjt.rbhcx.cn
http://TDT3t8eM.rbhcx.cn
http://fRFA2192.rbhcx.cn
http://5XV7Yoai.rbhcx.cn
http://VdjjtGWc.rbhcx.cn
http://Bpy8UK31.rbhcx.cn
http://1IkcxQxz.rbhcx.cn
http://www.dtcms.com/a/372894.html

相关文章:

  • 在Word和WPS文字中将手机中间4位替换为星号****
  • Chrome的“无处不在”与推动Web平台演进的使命
  • 开源PSS解析器1
  • 软件OS研发行业人机料法环应用总结:基于鱼骨图的分析框架
  • PyTorch 中nn.Embedding
  • Linux之环境变量(内容由浅入深,层层递进)
  • Linux control group笔记
  • 【Nginx】性能优化与实战(上)
  • LangChain RetrievalQA
  • MybatisPlus开启多租户三步快速集成
  • 现代Web应用前后端架构设计与Python实战
  • YOLO介绍(1)
  • 【javaSE】String类
  • 9.渗透-.Linux基础命令(一)(有vi编辑器)
  • LeetCode - LCR 179. 查找总价格为目标值的两个商品
  • ArcGIS Pro 遇到严重的应用程序错误而无法启动
  • 轻松Linux-9.进程间通信
  • 20250908的学习笔记
  • Golang 与 gRPC
  • shareId 的产生与传递链路
  • Go语言实战案例-开发一个JSON格式校验工具
  • AI技术架构与GEO算法原理如何重塑搜索引擎可见性
  • 【AI测试前沿】谷歌Fuzzing安全测试Go语言指南
  • 佰力博检测与您探讨薄膜样品如何测介电常数?
  • jsBridge接入流程
  • TFS-2018《On the convergence of the sparse possibilistic c-means algorithm》
  • ArrayList中的源码解析
  • 详细解析SparkStreaming和Kafka集成的两种方式的区别和优劣
  • 大数据Spark(六十三):RDD-Resilient Distributed Dataset
  • 云原生TodoList Demo 项目,验证云原生核心特性