OpenCV教程——处理图像像素及图像掩膜

news2024/11/15 11:07:24

1.像素值

像素值是图像被数字化时由计算机赋予的值,代表了图像中某一小方块(即【像素点】)的平均亮度信息。

灰度图像通常用8位表示一个像素,这样总共有256个灰度等级(像素值在0~255之间)。

对于RGB彩色图像来说,RGB的所谓“多少”就是指亮度,并使用整数来表示。通常情况下,RGB各有256级亮度,亮度取值范围为0~255,共256级。按照计算,256级的RGB色彩总共能组合出约1678万种色彩,即256*256*256=16777216。通常也被简称为1600万色千万色,也称为24位色(2的24次方)。R=0,G=0,B=0

,各通道亮度均为0,自然是黑色。R=255,G=255,B=255

,各通道亮度均为最大,就是白色。

1.1.分辨率

分辨率可分为显示分辨率图像分辨率

  • 显示分辨率:又称屏幕分辨率,是指显示器所能显示的像素点的个数。即每行的像素点数*每列的像素点数,例如:1024*768。
  • 图像分辨率:即单位英寸中所包含的像素点数,其定义更趋近于分辨率本身的定义。可以简单理解为每个像素点的大小。

1.2.FOV

FOV是Field Of View的简称,即视野(CT中常称为扫描野)。通常有FOV=矩阵大小*分辨率。单位通常为mm或cm。

2.OpenCV处理图像像素

2.1.获取图像像素指针

Mat.ptr<uchar>(int i=0):获取像素矩阵的指针,索引i表示第几行,从0开始计数。

获取点P(row,col)

的像素值:Mat.ptr<uchar>(row)[col]

⚠️像素值通常为uchar类型,因为像素值的取值范围通常为0~255,和uchar(即unsigned char)取值范围一样。但是也可以根据实际情况调整为其他类型。

2.2.获取图像的长和宽

Mat.cols输出的是图像x轴的像素个数,即Width。

Mat.rows输出的是图像y轴的像素个数,即Height。

Mat.channels()输出的是每个像素点的通道个数,RGB图像通道个数为3。

2.3.像素范围处理

saturate_cast<uchar>可用于控制像素值的取值不超过uchar所能表示的范围,即0~255。也可根据需求换成其他类型。

  1. saturate_cast<uchar>(<0),像素值小于0时返回0。
  2. saturate_cast<uchar>(>255),像素值大于255时返回255。
  3. saturate_cast<uchar>(0≤i≤255),返回i

3.掩膜操作

3.1.掩膜

数字图像处理中的掩膜的概念是借鉴于PCB制版的过程,在半导体制造中,许多芯片工艺步骤采用光刻技术,用于这些步骤的图形“底片”称为掩膜(也称作“掩模”),其作用是:在硅片上选定的区域中对一个不透明的图形模板遮盖,继而下面的腐蚀或扩散将只影响选定的区域以外的区域。

3.1.1.图像掩膜

图像掩膜与其类似,用选定的图像、图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程。

3.2.矩阵的掩膜操作

假设使用的掩膜如下所示:

红色中心元素的像素值为I(i,j)

,经过上图中的掩膜操作后,红色中心元素的像素值为:

5∗I(i,j)−[I(i−1,j)+I(i+1,j)+I(i,j−1)+I(i,j+1)]

用此掩膜从上至下,从左至右(❗️不得超过图像的边界)对图像进行操作,得到的图像就是增强对比度的图像。

矩阵的掩膜操作对多通道图像的操作方法见下图:

3.3.OpenCV中的API

OpenCV中对应的API:filter2D(InputArray src,OutputArray dst,int ddepth,InputArray kernel,…)。其中:

  • src为输入图像。
  • dst为目标图像,其尺寸和通道与输入图像一致。
  • ddepth期望的目标图像类型,即位图深度。其中输出图像的位图深度应该大于或者等于输入图像的位图深度。值为-1时表示与原图(即src)的位图深度一样。
  • 定义掩膜(例如定义一个3.2部分中所示的掩膜):Mat Kernel=(Mat_<char>(3,3)<<0,-1,0,-1,5,-1,0,-1,0)

3.3.1.位图深度

即位图中要用多少个二进制位来表示每个点的颜色,是分辨率的一个重要指标。常用有1位(单色),2位(4色,CGA),4位(16色,VGA),8位(256色),16位(增强色),24位(真彩色)和32位等。

在OpenCV中,S为符号整型,U为无符号整型,F为浮点型。例如:CV_8UCV_16UCV_16SCV_32F等。

⚠️转化为不同的位图深度:src.convertTo(dst,CV_32F)

👉src.convertTo(dst, type, scale, shift):

  • src为原始图像。
  • dst为输出图像。
  • type为输出图像的位图深度。
  • scale参数对图像进行缩放:dst(i)=src(i)×scale
  • shift参数:dst(i)=src(i)×scale+(shift,shift,…)

4.计时函数

getTickCount():用于返回从操作系统启动到当前所经过的计时周期数。即计时次数。

getTickFrequency():用于返回CPU的频率。这里的单位是秒,也就是一秒内重复的次数。即一秒内,计时多少次。

即:

总次数/一秒内重复的次数=时间(s)

5.%.2d的含义

%.2d:表示输入数据的类型。

如常用的d(整型)、f(浮点型)、c(字符)、s(字符串)。

长度格式符为lhl表示输入长整型数据(如%ld)和双精度浮点数(如%lf)。h表示输入短整型数据。

%2d是将数字按宽度为2,采用右对齐方式输出,如果数据位数不到2位,则左边补空格。

%02d:默认情况下,数据宽度不够2位是用空格填补的(如果位数够的话就不需要补了),但是因为2d前面有0,表示数据宽度不足时用0填补。%.2d%02d一样。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/505264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最值得推荐的免费分区管理软件

磁盘管理是 Windows 的内置工具&#xff0c;用于操作硬盘上的分区&#xff0c;但自 Windows XP 以来直到Windowa11 该程序几乎没有变化。个人测试了五个备选方案&#xff0c;以了解它们之间的比较。 奇客分区 默认的分区个数根据磁盘大小&#xff1f;需要重新划分分区&#xf…

2023/5/8总结

JAVA基础知识&#xff08;2&#xff09; 1.方法 1、方法定义 格式&#xff1a;public static void 方法名&#xff08;&#xff09;{ //方法体 } 2、方法调用 格式&#xff1a;方法名&#xff08;&#xff09;&#xff1b; 3、方法的通用格式 public static 返回值类型方法名&…

Camtasia2023官方中文版免费下载

在现在的网络互联网时代&#xff0c;越来越多的人走上了自媒体的道路。有些自媒体人会自己在网络上录制精彩视频&#xff0c;也有一些人会将精彩、热门的电影剪辑出来再加上自己给它的配音&#xff0c;做成大家喜欢看的电影剪辑片段。相信不管大家是自己平时有独特的爱好也好、…

【机组组合】基于数据驱动的模型预测控制电力系统机组组合优化【IEEE24节点】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

MySQL ---- 事务

事务 1、事务简介 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撒销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 在实际的开发过程中&#xff0c;一个业务操作如&am…

如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)

如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows) 如何制作 ESXi USB 启动盘 请访问原文链接&#xff1a;https://sysin.org/blog/create-bootable-esxi-usb-installer/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysi…

第四十六章 Unity 布局(上)

学习了UI元素的使用&#xff0c;并不能构建出一个完整的UI界面&#xff0c;我们需要使用一些方法将这些UI元素按照“设计稿”的效果&#xff0c;将其摆放到对应的位置上。如何摆放这些UI元素&#xff0c;就是我们需要讲的“布局”&#xff0c;当然这需要借助一些布局组件来完成…

SpringBootFoundation

SpringBootFoundation 一. 项目创建1.1 创建项目1.2 并调整pom.xml1.3 创建子项目1.4 配置子项目pom1.4.1 使用`csmall-server`作为父项目 并且 添加依赖项1.5 关于聚合项目二. YAML语法的配置2.1 关于YAML语法一. 项目创建 1.1 创建项目 本项目是一个聚合项目的结构,首先,创…

clickhouse集群部署指南

一、前言&#xff1a; 上篇文章介绍了clickhouse单机部署指南&#xff0c;本章重点介绍下集群部署指南&#xff0c;文章重在实战&#xff0c;相关知识请自行学习。 二、环境准备&#xff1a; CentOS7 4核16G 3台(172.25.16.82、172.25.16.83、172.25.16.84) 三、安装包准备…

第三方ipad笔哪个牌子好用?ipad触控笔推荐平价

至于选择苹果原装的电容笔&#xff0c;还是平替的电容笔&#xff0c;要看个人的需求而定&#xff0c;比如画图用的&#xff0c;可以用Apple Pencil&#xff1b;比如学习记笔记用的&#xff0c;可以用平替电容笔&#xff0c;目前的平替电容笔无论是品质还是性能&#xff0c;都非…

【Linux】Linux环境下安装Jenkins(图文解说详细版)

文章目录 前言1、在根目录下创建文件夹2、下载linux jenkins3、 进入jenkins目录解压&#xff0c;解压命令&#xff1a;4、启动5、访问一下,浏览器访问&#xff1a;http://服务器IP:8080/ 前言 首先安装Jenkins之前&#xff0c;linux中必须安装好了JDK和Maven&#xff0c;如果…

MVI架构理解

回顾MVC MVP MVVM MVC MVC架构主要分为以下几部分&#xff1a; View层: 对应于xm布局文件和java代码动态view部分。 Controller层: 主要负责业务逻辑&#xff0c;在android中由Activity承担&#xff0c;但xml视图能力太弱&#xff0c;所以Activity既要负责视图的显示又要加入…

Node框架 【Koa】之 【静态资源管理、模板引擎、连接数据库】

文章目录 &#x1f31f;前言&#x1f31f;静态资源托管&#x1f31f;安装&#x1f31f;使用 &#x1f31f;Koa视图&#x1f31f;EJS模板引擎使用&#x1f31f;安装&#x1f31f;配置&#x1f31f;使用&#x1f31f;模板渲染方法&#x1f31f;使用案例 &#x1f31f;数据库&…

OBS直播时编码器、码率控制器、分辨率帧率是什么以及如何向第三方推流

内容摘要&#xff1a;OBS直播时编码器、码率控制器、分辨率、帧率到底是什么&#xff0c;以及OBS向第三方直播平推流时&#xff0c;要注意什么。 图&#xff1a;OBS直播时输出界面参数设定 OBS编码器 1. 软编&#xff1a;x264 使用CPU进行编码&#xff0c;占用CPU资源多&…

m3u8文件

#EXTM3U&#xff1a;m3u文件头&#xff0c;必须放在第一行&#xff0c;起标示作用&#xff1b; #EXT-X-VERSION&#xff1a;播放列表文件的兼容版本。若不存在此标记&#xff0c;则默认为协议的第一个版本&#xff1b; #EXT-X-MEDIA-SEQUENCE&#xff1a; 播放列表中的每个媒…

第1章计算机系统漫游之 “操作系统管理硬件“

7、操作系统管理硬件 回到 hello 程序的例子。当 shell 加载和运行 hello 程序时&#xff0c;当 hello 程序输出自己的消息时&#xff0c;程序没有直接访问键盘、显示器、磁盘或主存储器。取而代之的是&#xff0c;它们依靠操作系统提供的服务。 可以把操作系统看成是应用程序…

王琤:当数据治理遇上ChatGPT

以ChatGPT为代表的人工智能等技术正在“狂飙”&#xff0c;为全球带来一场翻天覆地的变革。4月27日在2023数据治理新实践峰会上&#xff0c;Datablau数语科技创始人&CEO王琤先生以《数据治理新实践与人工智能》为主题进行了分享&#xff0c;与参会同仁共同探索当数据治理遇…

APP开发的上线流程

APP的使用已经非常普及&#xff0c;对于企业来说通过APP可以加强和客户的沟通&#xff0c;展现最新的产品和服务。随着APP应用商店对用户隐私的重视&#xff0c;APP的上线规则比以前更加复杂&#xff0c;甚至出现APP需要反复修改数十次才能上架的问题&#xff0c;今天和大家分享…

移远通信参加2023中国移动5G发展大会 ,共探5G创新未来

5月6日&#xff0c;以“聚力5G创新&#xff0c;共铸百业绽放”为主题的中国移动5G发展大会在郑州国际会展中心召开。作为5G赋能千行百业的重要贡献者&#xff0c;移远通信应邀参加大会&#xff0c;并深度参与了大会的多个环节。 会上&#xff0c;中国移动系列创新成果发布&…

【Linux】Linux安装tomcat(图文解说详细版)

文章目录 1、安装前置条件2、下载所需压缩包&#xff0c;上传到服务器3、对资源进行解压4、给防火墙添加访问端口&#xff08;默认8080&#xff0c;在它的/conf/server.xml文件里面查看&#xff09;5、然后切换到bin目录下&#xff0c;启动&#xff08;成功效果如图&#xff09…