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

第三章 Opencv图像像素操作

目录

    • 1.像素
      • 1-1.确定像素位置
      • 1-2.获取指定像素的像素值
      • 1-3.修改像素的BGR值
    • 2.用numpy模块操作像素
      • 2-1.创建图像
        • 1.创建黑白图像
        • 2.创建彩色图像
        • 3.创建随机图像
      • 2-2.拼接图像
        • 1.水平拼接`hstack()`方法
        • 2.垂直拼接`vstack()`方法

1.像素

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

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

1-1.确定像素位置

由电脑自带的画图软件打开图片可查看图片水平方向和垂直方向的像素数量。如下图所示,水平方向像素个数303,垂直方向像素个数266。

在这里插入图片描述

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

注意:

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

2.像素坐标表示为(垂直方向坐标W, 水平方向坐标H),与我们以前学习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[W, H] = [B, G, R]

    • 实例:

      在这里插入图片描述

  • 方式2:通道赋值;img[W, H,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中的数组顺序拼接的。

http://www.lryc.cn/news/1146.html

相关文章:

  • SpringBoot集成swagger3(CD2207)(内含教学视频+源代码)
  • Go语言语言学习十三(反射的对象值)
  • 【ESP 保姆级教程】玩转emqx数据集成篇② ——控制台输出动作(多用于测试环境调试功能)
  • MyBatis案例 | 使用映射配置文件实现CRUD操作——添加数据
  • 2023年,什么样的CRM,才是您最需要的?
  • 【C语言】编程初学者入门训练(6)
  • Java笔记-异常相关
  • pytest-xdist测试用例并发
  • 大数据---Hadoop安装jdk简易版
  • 【0基础学爬虫】爬虫基础之爬虫的基本介绍
  • Python 数据库开发实战 - Python与Redis交互篇- 综合案例 - 新闻管理系统 - 缓存新闻数据至redis
  • Vue拼图验证
  • 这个神器,让 Python 爬虫如此简单
  • 网络舆情公关必须把握的四项基本原则
  • Kafka技术认知
  • 2022年新一代kaldi团队技术输出盘点
  • 数据结构复习(三)顺序表oj
  • 2023.2.10每日一题
  • Homekit智能家居DIY一智能吸顶灯
  • 关于 OAuth 你又了解哪些?
  • 18. 构造函数和析构函数,构造函数的分类和调用
  • JavaScript设计模式es6(23种)
  • 设计「业务」与「技术」方案
  • C/C++:预处理(下)
  • 2023互联网相关岗位转行与就业选择的简单分析
  • LeetCode·每日一题·1223.掷骰子模拟·记忆化搜索
  • 【GPLT 二阶题目集】L2-043 龙龙送外卖
  • Maven:基础知识
  • Web 框架 Flask 快速入门(一)flask基础与模板
  • 1CN/Jaccard/PA/AA/RA/Katz/PageRank/SimRank