第三章 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.确定像素位置
由电脑自带的画图软件打开图片可查看图片水平方向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中的数组顺序拼接的。
第三章 Opencv图像像素操作相关推荐
- C++Opencv图像像素操作
Mat对象与数学中的矩阵相似,也可以实现加减乘除. //像素值加法 Mat operator_demo1(Mat& image) {Mat dst;dst = image + Scalar(5 ...
- 第三章:Windows 7操作——知识点整理
第三章:Windows 7操作--知识点整理 第三章:Windows 7操作 知识梳理 高频考点 3.1 操作系统概述 3.1.1 操作系统的概念 3.1.2 操作系统的功能 ⭐️⭐️⭐️ 3.1.3 ...
- MyBatis快速入门——第三章、DML语句操作
MyBatis快速入门--第三章.DML语句操作 目录 在接口类中添加[UsersMapper.java] 修改[com.item.mapper.UsersMapper.] [action.java] ...
- OpenCV二值化图像像素操作
二值化图像像素不是0就是255,数据类型为uchar.所以访问方法是: // 这里inputmat是二值化图像的mat inputmat.at<uchar>(y, x); 判断是否为白色的 ...
- 《Fundamentals of Computer Grahpics 4ed》虎书第四版翻译——第三章光栅图像
文章目录 3.1 光栅设备 3.1.1 显示器 3.1.2 硬拷贝设备 3.1.3 输入设备 3.2 图像,像素和形状 3.2.1 像素值 3.2.2 显示器强度和伽马 3.3 RGB颜色 3.4 A ...
- C++ opencv之像素操作之逻辑操作(bitwise_and,bitwise_xor,bitwise_or,bitwise_not)
文章目录 一.知识点 二.函数原型 1.按位与操作 2.按位或操作 3.按位异或操作 4.取反操作 5.绘制矩形框操作 三.代码 四.附图 1.按位与操作附图 2.按位或操作附图 3.按位异或操作附图 ...
- MATLAB 图像函数(第三章) 图像基本处理
1.graythresh------全局图像阈值 根据otsu方法求得图像二值化阈值 I=imread('lena.jpg'); level=graythresh(I); bw=im2bw(I< ...
- opencv之 图像像素操作(如何通过opencv在图像上划线)
首先我们了解,一个图像,都是一个大的二维数组,每一个元素都是一个像素,若是rgb图像,则该像素还会有rgb三个值,我们读入一个图像 import cv2img = cv2.imread("o ...
- OpenCV图像像素遍历与访问
遍历方式有很多种,下面给出两种方式: 基于数组遍历 基于指针遍历 1.基于数组遍历 Mat类中的cols.rows为图像的宽.高.成员函数at(row,col)可以存取图像元素.对于包含彩色图像的Ma ...
最新文章
- C++中的explicitkeyword
- java 8代码 改 java7_Java 8 到 Java 14,改变了哪些你写代码的方式?
- Python 面向对象 实例方法 属性 (上)
- 用Jenkins编译asp.net
- 【ElasticSearch】Es 源码之 IndicesClusterStateService 源码解读
- 简化java_Java泛型太复杂了?如何简化?
- 关于WM_NOTIFY的使用方法
- Windows server 2012 系统安装 密钥
- 2017中国之旅系列之十:山西张壁古堡之旅
- PCL:getCircumcircleRadius ❤️ 计算三角形外接圆半径
- Linux vim编辑器
- 松原计算机等级考试试题,2019年上半年吉林省松原市计算机等级考试注意事项...
- CSS 技巧,冲鸭!
- android_app开发微信支付集成
- 【龙讯module小课堂】“光”怪陆离:PWmat计算光学性质(三)
- .resource文件如何打开
- 解答:C语言中结构体的定义中,后面跟的“结构体变量”到底是什么?
- 区块链中的石墨烯技术是什么
- (转) ML笔记:字典学习1(Dictionary Learning)
- 【论文笔记】ECCV_2016_The Unreasonable Effectiveness of Noisy Data for Fine-Grained Recognition