当前位置: 首页 > 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中的数组顺序拼接的。

相关文章:

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

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子&#xff08…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合

无论是python,或者java 的大型项目中,都会涉及到 自身平台微服务之间的相互调用,以及和第三发平台的 接口对接,那在python 中是怎么实现的呢? 在 Python Web 开发中,FastAPI 和 Django 是两个重要但定位不…...