• opencv从入门到精通 哦吼02


    目录

    使用 NumPy 模块操作像素

    NumPy 概述

    数组的类型

    创建数组

    操作数组

    切片操作就不学了python笔记中已提

    创建图像

    黑中有白

    斑点图

    拼接图像

    色彩空间与通道

    色彩空间

    GRAY 色彩空间

    HSV 色彩空间

    通道

    拆分通道

    合并通道

    alpha 通道


    使用 NumPy 模块操作像素

    图像在 OpenCV 中以二维或三维数组表示,数组中的每一个值就是图像的像素值。善于操作数组的 NumPy 模块就成了 OpenCV 的依赖包。OpenCV 中很多操作都要依赖 NumPy 模块,例如创建纯色图像、创建掩模和创建卷积核等。本节将简单介绍 NumPy 模块的常用操作方法,并演示如何利用 NumPy 模块创建图像。

    NumPy 概述

    NumPy(见图 4.9)更像是一个魔方(见图 4.10),它是 Python 数组计算、矩阵运算和科学计算的核心库,NumPy 来源于 Numerical 和 Python 两个单词。NumPy 提供了一个高性能的数组对象,以及可以轻松创建一维数组、二维数组和多维数组等大量实用方法,帮助开发者轻松地进行数组计算,从而广泛地应用于数据分析、机器学习、图像处理和计算机图形学、数学任务等领域中。由于 NumPy 是由 C 语言实现的,所以其运算速度非常快。具体功能如下。

    数组的类型

    在对数组进行基本操作前,首先了解一下 NumPy 的数据类型。NumPy 比 Python 增加了更多种类的数值类型,如表 4.1 所示,为了区别于 Python 数据类型,NumPy 中的 bool、int、float、complex 等数据类型名称末尾都加了短下画线「_」。

    创建数组

    NumPy 提供了很多创建数组的方法,下面分别介绍。

    1.最常规的 array()方法

     numpy.array(object, dtype, copy, order, subok, ndmin)

    .创建用 0 填充的数组

     zeros()

    创建纯 1 数组

    ones()

    创建随机数组

    randint()

    操作数组

    加法运算

    减法和乘除法运算

    幂运算

    比较运算

    使用 NumPy 创建 2 个数组,分别使用「>=」「==」「<=」和「!=」运算符比较 2 个数组

    复制数组

     n2 = np.array(n1, copy=True)

    切片操作就不学了python笔记中已提

    创建图像

    创建纯白图像。

    1. import cv2
    2. import numpy as np
    3. width=200
    4. height=100
    5. image=np.zeros((height,width))
    6. image[:100,:200]=255
    7. cv2.imshow('img',image)
    8. cv2.waitKey(0)

    创建纯黑图片

    可以将上述代码的255改成0

    黑中有白

    1. import cv2
    2. import numpy as np
    3. width=600
    4. height=400
    5. img=np.zeros((width,height))
    6. img[100:200,100:200]=255
    7. cv2.imshow('img',img)
    8. cv2.waitKey(0)
    9. cv2.destroyAllWindows()

    斑点图

    1. import cv2
    2. import numpy as np
    3. width=200
    4. height=100
    5. img=np.random.randint(256,size=(height,width),dtype=np.uint8)
    6. cv2.imshow('img',img)
    7. cv2.waitKey(0)
    8. cv2.destroyAllWindows()
     
    

    彩色斑点只需要将二维改成三维就行
     

    拼接图像

    水平拼接数组

    array = numpy.hstack(tup)

    垂直拼接数组

     array = numpy.vstack(tup)

    色彩空间与通道

    色彩是人类的眼睛对于不同频率的光线的不同感受,不同频率的光线既是客观存在的又是人类主观感知的。为了表示这些不同频率的光线的色彩,人类建立了多种色彩模型,把这些色彩模型称作色彩空间。OpenCV 中的 BGR 色彩空间有 3 个通道,即表示蓝色的 B 通道、表示绿色的 G 通道和表示红色的 R 通道。本章将具体讲解色彩空间和通道,以及二者之间的紧密联系。

    色彩空间

    虽然 Photoshop 把一幅彩色图像的色彩空间默认为 RGB 色彩空间,但是 OpenCV 把一幅彩色图像的色彩空间默认为 BGR 色彩空间,这是因为 OpenCV 拆分一幅彩色图像的通道后,默认的通道顺序是 B→G→R。熟悉了 BGR 色彩空间后,本节将结合如图 5.1 所示的图像(本书彩色图像见资源包),介绍另外两个比较常见的色彩空间:GRAY 色彩空间和 HSV 色彩空间。

    GRAY 色彩空间

    1.什么是 GRAY 色彩空间

    GRAY 色彩空间通常指的是灰度图像,灰度图像是一种每个像素都是从黑到白,被处理为 256 个灰度级别的单色图像。这 256 个灰度级别分别用区间[0,255]中的数值表示。其中,「0」表示纯黑色,「255」表示纯白色,0~255 的数值表示不同亮度(即色彩的深浅程度)的深灰色或者浅灰色。因此,一幅灰度图像也能够展现丰富的细节信息,如图 5.2 所示。

    dst = cv2.cvtColor(src, code)

    说明

    虽然色彩空间类型转换是双向的,而且 OpenCV 也提供了 cv2.COLOR_GRAY2BGR(从 GRAY 色彩空间转换到 BGR 色彩空间)和 cv2.COLOR_ BGR2GRAY(从 BGR 色彩空间转换到 GRAY 色彩空间)2 个色彩空间转换码,但是灰度图像是无法转换成彩色图像的。这是因为在彩色图像转换成灰度图像的过程中,丢失了颜色比例(即红色、绿色和蓝色之间的混合比例)。这些比例一旦丢失,就再也找不回来了。

    HSV 色彩空间

    1.什么是 HSV 色彩空间

    BGR 色彩空间是基于三基色而言的,三基色指的是红色、绿色和蓝色。而 HSV 色彩空间则是基于色调、饱和度和亮度而言的。

    其中,色调(H)是指光的颜色,例如,彩虹中的赤、橙、黄、绿、青、蓝、紫分别表示不同的色调,如图 5.4 所示。在 OpenCV 中,色调在区间[0,180]内取值。例如,代表红色、黄色、绿色和蓝色的色调值分别为 0、30、60 和 120。

    饱和度(S)是指色彩的深浅。在 OpenCV 中,饱和度在区间[0,255]内取值。当饱和度为 0 时,图像将变为灰度图像

    通道

    在 BGR 色彩空间中,图像的通道由 B 通道、G 通道和 R 通道构成。本节将介绍如何使用 OpenCV 提供的方法拆分和合并通道。

    拆分通道

    拆分一幅 BGR 图像中的通道

    当使用 split()方法拆分一幅 BGR 图像中的通道时,split()方法的语法如下:

      b, g, r = cv2.split(bgr_image)

    拆分一幅 HSV 图像中的通道

      h, s, v = cv2.split(hsv_image)

    合并通道

    合并 B 通道图像、G 通道图像和 R 通道图像

    当使用 merge()方法按 B→G→R 的顺序合并通道时,merge()方法的语法如下:

      bgr = cv2.merge([b, g, r])

    1. import cv2
    2. image=cv2.imread('dog/gou .jpg')
    3. image_cv2=cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
    4. h,s,v=cv2.split(image_cv2)
    5. #h[:,:]=180
    6. #v[:,:]=255
    7. s[:,:]=255
    8. image_cv2Y=cv2.merge((h,s,v))
    9. cv2.imshow('y',image_cv2Y)
    10. cv2.waitKey(0)
    11. cv2.destroyAllWindows()

    1. import numpy as np
    2. import cv2
    3. image=cv2.imread('dog/gou .jpg')
    4. image_hsv=cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
    5. #cv2.imshow('dog',image_hsv)
    6. b,g,r=cv2.split(image)
    7. h,s,v=cv2.split(image_hsv)
    8. # cv2.imshow('h',h)
    9. # cv2.imshow('s',s)
    10. # cv2.imshow('v',v)
    11. # cv2.imshow('b',b)
    12. # cv2.imshow('g',g)
    13. # cv2.imshow('r',r)
    14. image1=cv2.merge((b,g,r))
    15. cv2.imshow('image',image1)
    16. cv2.waitKey(0)
    17. # cv2.destroyAllWindows()

    alpha 通道

    BGR 色彩空间包含了 3 个通道,即 B 通道、G 通道和 R 通道。OpenCV 在 BGR 色彩空间的基础上,又增加了一个用于设置图像透明度的 A 通道,即 alpha 通道。这样,形成一个由 B 通道、G 通道、R 通道和 A 通道 4 个通道构成的色彩空间,即 BGRA 色彩空间。在 BGRA 色彩空间中,alpha 通道在区间[0,255]内取值;其中,0 表示透明,255 表示不透明。

  • 相关阅读:
    【Spring的自动装配】
    uniapp使用vue3语法构建自定义导航栏,适配小程序胶囊
    高德地图开发(六)——计算距离
    包装印刷行业万界星空科技云MES解决方案
    mysql进阶: mysql中的锁(全局锁/表锁/行锁/间隙锁/临键锁/共享锁/排他锁)
    mybatis 04: mybatis对象分析 + 测试代码简化 + 配置优化
    Ms08067安全实验室成功实施多家业务系统渗透测试项目
    Cadence Allegro DXF结构图的导入详细教程
    【Linux】IPC-信号
    0元真的能做游戏代理吗?
  • 原文地址:https://blog.csdn.net/qq_62218542/article/details/126929564