第三章 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中的数组顺序拼接的。
相关文章:

第三章 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…...

SpringBoot集成swagger3(CD2207)(内含教学视频+源代码)
SpringBoot集成swagger3(CD2207)(内含教学视频源代码) 教学视频源代码下载链接地址:https://download.csdn.net/download/weixin_46411355/87435564 目录SpringBoot集成swagger3(CD2207)&#…...
Go语言语言学习十三(反射的对象值)
在Go语言中反射不仅可以获取值的类型和种类,还可以获取值和更改值,使用reflect.ValueOf()获取和设置变量的值。 使用反射值包装任意值 Go语言通过reflect.ValueOf()获取的是值的反射值对象,书写格式如下 value : reflect.ValueOf(rawValue…...
【ESP 保姆级教程】玩转emqx数据集成篇② ——控制台输出动作(多用于测试环境调试功能)
忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-02-10 ❤️❤️ 本篇更新记录 2023-02-10 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...

MyBatis案例 | 使用映射配置文件实现CRUD操作——添加数据
本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址:🔥JavaWeb Java入门篇: 🔥Java基础学习篇 Java进阶学习篇&…...

2023年,什么样的CRM,才是您最需要的?
春节假期刚刚结束,当大家还沉浸在新春佳节的喜悦中时,很多地方已经争先恐后地奋力开跑了。近日,全国各地方政府相继出台并发布了2023年数字化转型规划,纷纷结合自身的区位特色和优势资源,明确2023年乃至此后数年的数字…...
【C语言】编程初学者入门训练(6)
文章目录51. 计算一元二次方程52. 获取月份天数53. 简单计算器54. 线段图案55. 正方形图案56. 直角三角形图案57. 翻转直角三角形图案58. 带空格直角三角形图案59. 金字塔图案60. 翻转金字塔图案51. 计算一元二次方程 问题描述:从键盘输入a, b, c的值,编…...

Java笔记-异常相关
一、异常概述与异常体系结构 Error:Java虚拟机无法解决的严重问题: JVM系统内部错误,资源耗尽,如:StackOverflow \OOM堆栈溢出 处理办法:只能修改代码,不能编写处理异常的代码 Exception:可以处理的异常 &…...
pytest-xdist测试用例并发
官方文档:pytest-xdist初次使用参考:Python测试框架pytest(22)插件 - pytest-xdist(分布式执行)pytest测试框架系列 - Pytest pytest-xdist 分布式、多进程并发执行用例你会用吗?Pytest-xdist并…...

大数据---Hadoop安装jdk简易版
编写自动安装jdk的shell脚本 完整流程: 大数据—Hadoop安装教程(一) 文章目录编写自动安装jdk的shell脚本上传压缩包编写shell脚本vim autoinstall.sh解压更名添加环境运行上传压缩包 在opt目录下创建连个目录install和soft 将压缩包上传到install目录…...

【0基础学爬虫】爬虫基础之爬虫的基本介绍
大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学…...

Python 数据库开发实战 - Python与Redis交互篇- 综合案例 - 新闻管理系统 - 缓存新闻数据至redis
接下来这个章节将继续来完成 《新闻管理系统》 这个项目,上一章节我们完成了 “发表新闻” 这个功能,在发表新闻后,什么时候才会缓存该条新闻记录呢?并不是说在发表新闻成功之后就立刻被缓存,而是该新闻被管理员审批通…...

Vue拼图验证
vue-puzzle-verification 封装的一个用于登录验证的拼图的vue组件,使用了canvas画图和拖拽的一些技巧。支持大小、形状、图片、偏差、范围的自定义。 一、安装使用 npm install vue-puzzle-verification 二、main.js里引入 import PuzzleVerification from vue…...

这个神器,让 Python 爬虫如此简单
相信大家应该都写过爬虫,简单的爬虫只需要使用 requests 即可。遇到复杂的爬虫,就需要在程序里面加上请求头和参数信息。类似这种: 我们一般的步骤是,先到浏览器的网络请求中找到我们需要的请求,然后将请求头和参数信…...
网络舆情公关必须把握的四项基本原则
在这个网络媒体占主导的时代,舆情公关进入了网络自媒体时代,有时候可能企业认为是小事儿,也可能在网上掀起轩然大波,所以网络舆情优化成为营销推广工作中重要一环。网络舆情优化的目标是让网络舆论对企业经营发展有利的方向发展&a…...

Kafka技术认知
文章目录概念理解名词解释基本架构工作流程Kafka的特性概念理解 Kafka是分布式的基于发布-订阅消息队列。是一个分布式、支持分区的、多副本的,基于 Zookeeper 协调的分布式消息中间件系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景…...

2022年新一代kaldi团队技术输出盘点
目录 1. 技术创新 1.1 Pruned RNN-T loss 1.2 RNN-T 的快速 GPU 解码 1.3 多码本量化索引的知识蒸馏 1.4 RNN-T 和 CTC 的低延时训练 1.5 Zipformer 1.6 Small tricks 2. 模型部署 2.1 Sherpa 2.1 Sherpa-ncnn 3. 更多的 recipe 和模型 参考资料 1. 技术创新 1.1 …...

数据结构复习(三)顺序表oj
目录 27. 移除元素 26. 删除有序数组中的重复项 88. 合并两个有序数组 27. 移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外…...
2023.2.10每日一题
每日一题题目描述解题核心解法一:模拟题目描述 题目链接:2553. 分割数组中数字的数位 给你一个正整数数组nums,请你返回一个数组answer,你需要将nums中每个整数进行数位分割后,按照nums中出现的相同顺序放入答案数组…...

Homekit智能家居DIY一智能吸顶灯
买灯要看什么因素 好灯具的灯光可以说是家居的“魔术师”,除了实用的照明功能外,对细节的把控也非常到位。那么该如何选到一款各方面合适的灯呢? 照度 可以简单理解为清晰度,复杂点套公式来说照度光通量(亮度&#x…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...

Canal环境搭建并实现和ES数据同步
作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...