第三章 Opencv图像像素操作

1.像素

1.像素是构成数字图像的最小单位。每一幅图像都是由M行N列个像素组成,每一个像素存储一个像素值。比如:灰度图像的像素值取值范围为[0, 255](取整),一共有256个像素等级/灰度级别。0为纯黑色,255表示纯白色。

2.一个像素是一个具有一定面积的块,而不是一个点;像素的形状也不是固定的,大多数情况下被认为是正方形,但有时也可能是圆形或其它形状。

1-1.确定像素位置

由电脑自带的画图软件打开图片可查看图片水平方向W和垂直方向H的像素数量。如下图所示,W水平方向像素个数303,H垂直方向像素个数266。
W:为宽度,所以定为水平方向;H为高度,所以定为垂直方向!!!

在这里插入图片描述

像素的位置通常使用像素建立的HW坐标系表示,如下图所示。

注意:

1.水平像素个数是303,但水平坐标是从0到302;同理,垂直坐标从0到265。你可以这样理解像素的左上角坐标=像素的位置坐标

2.像素坐标表示为(垂直方向坐标H, 水平方向坐标W),与我们以前学习xy坐标系中坐标表示(x, y)相反。

在这里插入图片描述

1-2.获取指定像素的像素值

在这里插入图片描述

1.一般来说,彩色图片采用的都是RGB色彩空间,在RGB色彩空间中存在三个通道。R通道、G通道和B通道,其中R通道指的是红色通道,G通道指的是绿色通道,B通道指的是蓝色通道,并且每个色彩通道都是在区间0~255内取值。

2.在RGB色彩空间中,彩色图像的通道顺序是 R → G → B,但是在OpenCV中,RGB色彩空间被BGR色彩空间取代,使得彩色图像的通道顺序变成了 B → G → R 。所以,上图读取到的各通道值为B(204)→ G(208)→ R(209)。

3.BGR色彩空间的图像,每3个数值表示一个像素,这三个数值分别表示蓝色,绿色和红色三种颜色的分量,把每一种颜色分量所在的区域称作通道。即 RGB/BGR 色彩空间的图像,用R、G、B 3个数值表示一个像素

1-3.修改像素的BGR值

  • 方式1:像素赋值;img[H, W] = [B, G, R]

    • 实例:

      在这里插入图片描述

  • 方式2:通道赋值;img[H, W,0或1或2] = 0~255中的某个整数

    • 实例:

      在这里插入图片描述

1.对于BGR色彩空间的图像,当每个像素的B、G、R 3个数值相等时,就可以得到灰度图像。其中,B=G=R=0为纯黑色,B=G=R=255为纯白色。

2.要想使改变后的像素保存到图片中,最后要执行imwrite()方法。

2.用numpy模块操作像素

关于numpy的知识以后再更新,也可以去网上搜索,这里主要讲关于opencv的。

2-1.创建图像

在opencv中,黑白图像实际上就是一个二维数组,彩色图像是一个三维数组。数组中的每个元素就是图像对应位置的像素值。因此,修改数组就是修改图像的像素(即修改图像)。所以,创建一张图像其实就是创建一个数组

1.创建黑白图像
  • 创建黑色图像:使用numpy提供的zeros()方法。

    • 实例:

      在这里插入图片描述

  • 创建白色图像:法1.先创建纯黑图像,再利用numpy的数组切片将所有像素值改为255;法2.使用numpy的ones()方法,再用数组乘法乘以255.

    • 实例:

      在这里插入图片描述

      在这里插入图片描述

2.创建彩色图像
  • 与创建黑白图像的方法相比,彩色图像创建时:a.size多了个通道数(为3);b.数组切片多了一个维度;c.数组乘法没区别

    • 实例:

      在这里插入图片描述

3.创建随机图像

在这里插入图片描述

1.numpy的zeros()方法第一个位置参数就是size,所以可以用位置参数;而randint()方法的第二个位置参数不是size,所以要用关键字参数。

2.综上,numpy创建图像的方法主要有:①numpy创建数组的内置方法;②numpy的数组乘法;③numpy的数组切片。

2-2.拼接图像

numpy提供了两种数组拼接的方法,分别为hstack()方法和vstack()方法。(h:horizontal水平的意思,v:vertical垂直的意思;stack:堆、叠的意思)

1.水平拼接hstack()方法
  • 语法格式:array = numpy.hstack(tup)

  • 参数说明:

    • array:拼接生成的新数组。
    • tup:需要拼接的数组;元组类型。
  • 实例:

    在这里插入图片描述

2.垂直拼接vstack()方法
  • 语法格式:array = numpy.vstack(tup)

  • 参数说明:

    • array:拼接生成的新数组。
    • tup:需要拼接的数组;元组类型。
  • 实例:

    在这里插入图片描述

注意拼接是有顺序的,是根据参数tup中的数组顺序拼接的。

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZGPing@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值