OpenCvSharp从入门到实践-(03)像素

目录

像素 

1、确定像素位置

2、获取像素的BGR值

3、修改像素的BGR值


像素 

图像数字化是指用数字表示图像,每一幅数字图像都是有M行N列的像素组成的,其中每一个像素都存储一个像素值。计算机通常会把像素值处理为256个灰度级别,这256个灰度级别分别用区间[0,255]中的数值表示,其中,“0”表示纯黑色;“255”表示纯白色。

像素是构成数字图像的基本单位,如下图是一副花朵的图像。

 放大图像中蓝色框区域,形成如下的放大图像。

不难发现,放大后的图像是由许多个小方块组成的,通常把一个小方块称作一个像素。因此,一个像素是具有一定面积的一个块,而不是一个点。需要注意的是,像素的形状是不固定的;大多数情况下,像素被认为是方块的,但是有的时候也可能是圆形或其他形状。

1、确定像素位置

图像的水平方向和垂直方向

在Windows系统的画图工具中 打开测试图片,得到如下界面,在这个界面中,我们可以看到在水平方向上的像素个数是590,在垂直方向上的像素个数是600。

根据水平方向和垂直方向上的像素个数,我们绘制如下图的坐标系。 

 上图中,在水平方向上的像素个数是590个,与其对应的是X轴的取值范围,即0~589;同理,在垂直方向上的像素个数是600个,与其对应的Y轴的取值范围,即0~599。

这样,就可以通过坐标来确定某个像素在图像中的位置。在OpenCV中,某个像素的坐标方式是(y,x),如上图,右下角的像素坐标是(599,589)。

2、获取像素的BGR值

代码

Mat mat = Cv2.ImRead("test.jpg");
Vec3b px =mat.At<Vec3b>(599, 589);
Console.WriteLine("坐标(599, 589)像素的BGR值是"+ px);
Console.ReadKey();

输出

坐标(599, 589)像素的BGR值是Vec3b (35, 155, 131)

人眼能够感知红色、绿色、蓝色这三种不同的颜色,因此把这三种颜色称作三基色。如果将这三种颜色以不同的比例进行混合,人眼就能看见丰富多彩的颜色。

对于计算机,如何对这些颜色进行编码呢?答案是利用色彩空间。也就是说,色彩空间是计算机对颜色进行编码的模型。

以常用的RGB色彩空间为例,在RGB色彩空间中,存在3个通道,即R通道、G通道、B通道。其中,R通道是指红色(Red)通道;G通道是指绿色(Green)通道;B通道是指蓝色(Blue)通道;并且每个色彩通道都在区间[0,255]内取值。

OpenCV对图像的通道顺序进行了转换,即把RGB图像的通道顺序转换为BGR。

分别获取(599, 589)像素的B通道、G通道、R通道的值。

代码

Mat mat = Cv2.ImRead("test.jpg");
Vec3b pixelValue = mat.At<Vec3b>(599, 589);
Console.WriteLine("Pixel value at (599, 589): B = {0}, G = {1}, R = {2}", pixelValue.Item0, pixelValue.Item1, pixelValue.Item2);
Console.ReadKey();

输出 

Pixel value at (599, 589): B = 35, G = 155, R = 131

3、修改像素的BGR值

上面我们读取了坐标(599, 589)上像素的BGR值,即(35,155,131)。现在将像素的BGR值由原来的(35,155,131)修改为(255,255,255),代码如下:

Mat mat = Cv2.ImRead("test.jpg");
Vec3b pixelValue = mat.At<Vec3b>(599, 589);

// 修改像素值
pixelValue[0] = 255; // 修改蓝色通道
pixelValue[1] = 255; // 修改绿色通道
pixelValue[2] = 255; // 修改红色通道
mat.At<Vec3b>(599,589) = pixelValue;

Vec3b new_pixelValue = mat.At<Vec3b>(599, 589);
Console.WriteLine("New pixel value at (599, 589): B = {0}, G = {1}, R = {2}", new_pixelValue.Item0, new_pixelValue.Item1, new_pixelValue.Item2);
Console.ReadKey();

输出

New pixel value at (599, 589): B = 255, G = 255, R = 255

对于BGR图像,当每个像素的B、G、R数值相等时,就可以得到灰度图像。其中B=G=R=0为纯黑色;R=G=B=255为纯白色。

实例 修改指定区域的所有像素值为白色

代码

Mat mat = Cv2.ImRead("test.jpg");

for (int i = 0; i < 100; i++)
{
    for (int j = 0; j < 100; j++)
    {
        mat.At<Vec3b>(i, j) = new Vec3b(255, 255, 255);//修改为白色
    }
}

Cv2.ImShow("test.jpg", mat);
Cv2.WaitKey();
Cv2.DestroyAllWindows();

效果

左上角区域都为白色

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

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

相关文章

k8s中安装consul集群

一、准备知识 headless services一般结合StatefulSet来部署有状态的应用&#xff0c;比如kafka集群&#xff0c;mysql集群&#xff0c;zk集群等&#xff0c;也包括本文要部署的consul集群。 0、consul集群 consul集群的分布式协议算法采用的是raft协议&#xff0c;这意味着必…

【后端】数据字典自动生成枚举

前言 随着我老板给我灌溉的思想,逐渐开始利用代码来完成一些重复性且没有创造性的工作(我变懒啦),当我发现数据字典可以生成枚举从而大大减少开发时间的时候,我意识到事情的重要性。 数据字典 我一开始在网上找各种代码生成器的框架,然后突然意识到,这个不就是简单的…

2022年MathorCup大数据竞赛B题北京移动用户体验影响因素研究求解全过程文档及程序

2022年MathorCup高校数学建模挑战赛—大数据竞赛 B题 北京移动用户体验影响因素研究 原题再现&#xff1a; 移动通信技术飞速发展&#xff0c;给人们带来了极大便利&#xff0c;人们也越来越离不开移动通信技术带来的各种便捷。随着网络不断的建设&#xff0c;网络覆盖越来越…

XIAO ESP32S3之套件简绍

很高兴收到柴火创客空间寄来的XIAO ESP32S3开发套件。 一、套件介绍 1、电路板部分 一块XIAO ESP32S3主板、一块摄像头接口板&#xff08;可接SD卡&#xff09;&#xff0c;一根2.4G天线。 2、配件部分 一根USB-A转TypeC数据线、一个USB3.0转TypeC转接头、一个SD卡读卡器&am…

vue中keep-alive的使用

什么是keep-alive&#xff1f; keep-alive是一个内置组件&#xff0c;用于缓存和管理组件的状态。 当 keep-alive包裹一个组件时&#xff0c;这个组件的状态将会被缓存起来&#xff0c;而不是每次重新渲染。这在多个视图之间切换时特别有用&#xff0c;可以避免重复的创建和销…

vue项目通过HBuilder打包成apk,实现apk自动更新下载

vue 项目通过 HBuilder 打包成 apk&#xff0c;实现 apk 自动更新下载 1、vue 项目通过 HBuilder 打包成 apk vue 项目在终端执行 npm run build 打包成 dist 文件&#xff0c;生成的 dist 文件在 项目根目录下 在 HBuilder 中 新建一个项目 默认选择 5APP 的默认模板项目…

springboot+vue智能企业设备管理系统05k50

智能设备管理系统主要是为了提高工作人员的工作效率和更方便快捷的满足用户&#xff0c;更好存储所有数据信息及快速方便的检索功能&#xff0c;对系统的各个模块是通过许多今天的发达系统做出合理的分析来确定考虑用户的可操作性&#xff0c;遵循开发的系统优化的原则&#xf…

linux 命令 sudo、su 命令

sudo命令详解 1、初识sudo sudo是linux下常用的允许普通用户使用超级用户权限的工具&#xff0c;sudo 用来执行需要提升权限&#xff08;通常是作为 root 用户&#xff09;的命令&#xff0c;允许系统管理员让普通用户执行一些或者全部的root命令&#xff0c;如halt&#xff…

spring boot的redis连接数过多导致redis服务器压力过大的一次问题排查

一、背景 在今天上午的时候&#xff0c;突然收到大量的sentry报错&#xff0c;都是关于redis连接超时的警告。 首先想到的是去查看redis的监控&#xff0c;发现那个时间段&#xff0c;redis的请求数剧增&#xff0c;cpu使用率和带宽都陡增双倍。 下面的是redis监控的cpu情况 …

无代码未来:智能、可视化、自动化的融合

无代码是一个相对较新的概念&#xff0c;不同的人群对其界定可能存在一定的差异。 对于IT专业人士和开发人员而言&#xff0c;无代码通常是指使用可视化界面和拖拽操作来构建应用程序的工具和平台。 无代码平台通过提供预先构建的组件和模块&#xff0c;使得开发人员可以通过简…

基于CW32F030单片机的便携式多功能测试笔

一、产品背景 在日常的硬件调试工作中&#xff0c;我们最常使用的仪器仪表可能就是万用表了&#xff0c;虽然万用表号称“万用”&#xff0c;但大部分时候&#xff0c;我们需要使用到的功能无非是电压测量和通断测量。 作为调试的“得力干将”&#xff0c;万用表有时候也会存…

歌手荆涛演唱的《春节回家》,一种情感的表达和文化的传承

歌手荆涛演唱的《春节回家》&#xff0c;一种情感的表达和文化的传承 春节回家&#xff0c;是中国传统文化中最为重要的传统节日之一&#xff0c;也是亿万华夏儿女最为期待的日子。每当春节临近&#xff0c;无论身在何处&#xff0c;人们都会收拾行囊&#xff0c;踏上归途&…

【5G PHY】5G SS/PBCH块介绍(四)

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

策略算法与Actor-Critic网络

策略算法 教程链接 DataWhale强化学习课程JoyRL https://johnjim0816.com/joyrl-book/#/ch7/main 策略梯度 与前面的基于价值的算法不同&#xff0c;这类算法直接对策略本身进行近似优化。 在这种情况下&#xff0c;我们可以将策略描述成一个带有参数 θ θ θ的连续函数…

WebUI自动化学习(Selenium+Python+Pytest框架)002

新建项目 New Project 新建一个python代码文件 file-new-python file 会自动创建一个.py后缀的代码文件 注意:命名规则,包含字母、数字、下划线&#xff0c;不能以数字开头&#xff0c;不能跟python关键字或包名重复。 ********************华丽分割线********************…

【算法】20231128

这里写目录标题 一、55. 跳跃游戏二、274. H 指数三、125. 验证回文串 一、55. 跳跃游戏 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&am…

【MATLAB源码-第91期】基于matlab的4QAM和4FSK在瑞利(rayleigh)信道下误码率对比仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 正交幅度调制&#xff08;QAM&#xff0c;Quadrature Amplitude Modulation&#xff09;是一种在两个正交载波上进行幅度调制的调制方式。这两个载波通常是相位差为90度&#xff08;π/2&#xff09;的正弦波&#xff0c;因此…

C语言第三十四弹--矩形逆置

C语言实现矩阵逆置 逆置结果如图 思路&#xff1a;通过观察逆置结果&#xff0c;首先发现行数和列数都发生了调换。其次观察逆置前后数字对应的下标&#xff0c;逆置前数字对应下标为:[x][j] 逆置后数字对应下标为&#xff1a;[y][x]。综上&#xff0c;就可以实现矩阵逆置。 …

3D点云目标检测:CT3D解读(未完)

CT3D 一、RPN for 3D Proposal Generation二、Proposal-to-point Encoding Module2.1、Proposal-to-point Embedding2.2、Self-attention Encoding 三、Channel-wise Decoding Module3.1、Standard Decoding3.2、Channel-wise Re-weighting3.3、Channel-wise Decoding Module 四…

Pinctrl子系统和GPIO子系统实验

驱动入口出口函数&#xff1a; static int __init led_init(void) {return 0; } static void __exit led_exit(void) { }module_init(led_init);module_exit(led_exit);MODULE_LICENSE("GPL");字符设备驱动那一套 先创建设备结构体 &#xff08;cdev&#xff09; 1…