当前位置: 首页 > news >正文

OpenCV入门3:像素操作

在OpenCV中,图像的像素值是以一个多维数组的形式表示的。上一篇已经介绍了cv::Mat类。对于图像中的每一个像素,可以通过Mat对象中的at<type>(i,j)函数(type可以是uchar、int等)获得Mat对象的像素值。

  • 访问像素值:
cv::Vec3b pixel = image.at<cv::Vec3b>(y, x); // 获取指定像素处的像素值
unsigned char r = pixel[2]; // 获取红色通道的像素值
  • 修改像素值:
image.at<cv::Vec3b>(y, x) = cv::Vec3b(255, 0, 0); // 设置指定像素处的像素值为蓝色

对于一幅图片,如果想要对其中的一些像素点进行计算,一般通过Mat矩阵的二维循环逐一改变像素值。例如: 

  Mat image = imread("test.jpg");int rows = image.rows;int cols = image.cols;for (int i = 0; i < rows; i++){for (int j = 0; j < cols; j++){Vec3b& color = image.at<Vec3b>(i, j);color[0] = 255 - color[0]; // 修改 B 像素值color[1] = 255 - color[1]; // 修改 G 像素值color[2] = 255 - color[2]; // 修改 R 像素值}}imshow("image", image);waitKey();

这段代码演示了如何遍历图像的每个像素并反转BGR通道的值,然后显示处理后的图像。

其实很多图像变换再OpenCV中已经封装了相应的功能函数,不需要开发者进行像素级的操作,下面列举几个常用的OpenCV图像变换和像素运算,后续有机会还会专门讲解图像变换。

  • 图像阈值化:

通过对图像进行阈值化操作,可以将像素值转换为二进制形式,用于图像分割、目标检测等应用。cv::threshold()是一个常用的函数,它将图像像素值与设定的阈值比较,根据条件将像素值设为给定的最大值或最小值。

cv::Mat grayImage; 
cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY); // 将彩色图像转为灰度图像 
cv::Mat thresholdImage; 
cv::threshold(grayImage, thresholdImage, 128, 255, cv::THRESH_BINARY); // 将灰度图像进行二值化处理
  • 图像像素算术运算:

可以对两个图像进行像素级的算术运算,如加法、减法、乘法或除法。函数cv::add()、cv::subtract()、cv::multiply()、cv::divide()等常用于图像的像素级算术运算。

cv::Mat image1 = cv::imread("image1.jpg"); 
cv::Mat image2 = cv::imread("image2.jpg"); 
cv::Mat result; 
cv::add(image1, image2, result); // 图像相加 
cv::Mat diff; 
cv::subtract(image1, image2, diff); // 图像相减

这些是OpenCV中常见的像素级相关操作和计算的示例,包括像素值的读取和修改、图像阈值化、像素算术运算等。通过对图像的每个像素进行操作和计算,我们可以实现丰富的图像处理和分析功能。

上述代码中还用到了图像读取的函数imread()。这个函数是OpenCV中图像加载的方法。除此之外还有一些常用的图像操作的方法,举例如下:

  • 加载和保存图像:

cv::imread()函数可以读取多种图像格式的文件,例如JPEG、PNG等,cv::imwrite()函数可以将图像保存到磁盘上。例如:

  Mat image = imread("test.jpg");imwrite("output.jpg", image);
  • 图像的基本处理:

OpenCV中提供了一些基本的图像处理函数,例如resize()(调整图像大小)、reshape()(调整通道数)、copyTo()(复制图像)等。例如:

  Mat image = imread("test.jpg");Mat resizedImage;resize(image, resizedImage, Size(128, 128));imshow("image", resizedImage);waitKey();

这段代码演示了如何将图像缩小并显示缩小后的图像。

相关文章:

OpenCV入门3:像素操作

在OpenCV中&#xff0c;图像的像素值是以一个多维数组的形式表示的。上一篇已经介绍了cv::Mat类。对于图像中的每一个像素&#xff0c;可以通过Mat对象中的at<type>(i,j)函数&#xff08;type可以是uchar、int等&#xff09;获得Mat对象的像素值。 访问像素值&#xff1…...

使用内网穿透工具,远程测试本地接口

学习目标&#xff1a; 目标 含义&#xff1a; 内网穿透工具是一种能够帮助没有公网IP或者动态IP用户进行远程访问内网应用的工具。通过内网穿透&#xff0c;用户无论身处任何网络环境&#xff0c;都可以方便地访问企业内部的ERP、OA、CRM等应用。内网穿透工具还支持默认的Htt…...

uniapp小程序才到第五层就报错navigateto:fail webview count limit exceed

错误截图 原因 小程序官方描述是说可以跳转10层&#xff0c;但是使用uniapp开发的程序在小程序中才运行到第五层就报错了&#xff0c;原因是因为没有设置appId。如果设置了就正常了。...

【C++】map set

map & set 一、关联式容器二、键值对三、树形结构的关联式容器1. set&#xff08;1&#xff09;set 的介绍&#xff08;2&#xff09;set 的使用 2. multiset3. map&#xff08;1&#xff09;map 的介绍&#xff08;2&#xff09;map 的使用 4. multimap 四、map 和 set 的…...

正点原子嵌入式linux驱动开发——Linux Regmap驱动

在前面学习I2C和SPI驱动的时候&#xff0c;针对I2C和SPI设备寄存器的操作都是通过相关的API函数进行操作的。这样Linux内核中就会充斥着大量的重复、冗余代码&#xff0c;但是这些本质上都是对寄存器的操作&#xff0c;所以为了方便内核开发人员统一访问I2C/SPI设备的时候&…...

京东商品详情API,页面信息采集,优惠券信息获取

京东开放平台提供了API接口来访问京东商品详情。通过这个接口&#xff0c;您可以获取到商品的详细信息&#xff0c;如商品名称、价格、库存量、描述等。额外还附加一个优惠券信息接口。代码如下: 京东获得JD商品详情 API 优惠券接口 公共参数 名称类型必须描述keyString是调…...

Visual Studio 2022 + OpenCV 4.5.2 安装与配置教程

目录 OpenCV的下载与配置Visual Studio 2022的配置新建工程新建文件新建项目属性表环境配置测试先写一个输出将OpenCV的动态链接库添加到项目的 x64 | Debug下测试配置效果 Other OpenCV的下载与配置 参考这个OpenCV的下载与环境变量的配置&#xff1a; Windows10CLionOpenCV4…...

docker 安装 mysql (单体架构)

文章归档&#xff1a;https://www.yuque.com/u27599042/coding_star/nckzqa73g47hgz3x 查询 MySQL 镜像 docker search mysql拉取 MySQL 镜像 docker pull mysql在宿主机创建映射目录 mkdir -p \ /home/docker/mysql/log \ /home/docker/mysql/data \ /home/docker/mysql/co…...

城市内涝怎么预警?万宾科技内涝积水监测仪

在城市运行过程中&#xff0c;城市内涝问题频繁出现&#xff0c;影响城市管理水平的提升&#xff0c;也会进一步减缓城市基础设施建设。尤其近几年来&#xff0c;城市内涝灾害频繁出现&#xff0c;在沿海地区内涝所带来的安全隐患成为城市应急管理部门的心头大患。城市内涝的背…...

Spring基础(2):放弃XML,走向注解

上一篇并没有实际地带大家去看源码&#xff0c;而是介绍了两个概念&#xff1a; BeanDefinitionBeanPostProcessor 当然&#xff0c;我介绍得非常笼统&#xff0c;不论是BeanDefinition还是BeanPostProcessor其实都有着较为复杂的继承体系&#xff0c;种类也很多。作为Spring…...

【线性代数】分块矩阵总结

...

Redis-命令操作Redis->redis简介,redis的安装(Linux版本windows版本),redis的命令

redis简介redis的安装&#xff08;Linux版本&windows版本&#xff09;redis的命令 1.redis简介 Redis是一个开源&#xff08;BSD许可&#xff09;&#xff0c;内存存储的数据结构服务器&#xff0c;可用作数据库&#xff0c;高速缓存和消息队列代理。 它支持字符串、哈…...

17、Python虚拟环境:为何要用虚拟环境、如何使用virtualenv

文章目录 在Python开发中,虚拟环境是一个独立的目录树,可以在其中安装Python模块。每个虚拟环境都有自己的Python二进制文件和一组安装的库。使用虚拟环境的主要原因是为了避免项目间的依赖冲突,允许每个项目有其特定的依赖,而不影响全局安装的模块。 为何要用虚拟环境 依…...

elasticSearch 接口实现查询热词统计

前面讲过使用elasticsearch可视化工具可以直接写语法查询如下: GET robot-demand/_search { "size":10, //查询多少条数据 "aggs":{ "hot_words":{ "terms":{ "field": "title" } }…...

10年测试经验分享:新手如何找到适合自己的软件测试项目?

每一个测试新手&#xff08;特别是自学测试的人&#xff09;来说&#xff0c;往往不知道到哪里去找项目练手&#xff0c;这应该是最大的困扰了。 实话讲&#xff0c;这个目前没有非常好的、直接的解决办法&#xff0c;不过在这我可以结合我自己之前的一些工作经历&#xff0c;…...

【MySQL】查询语句

文章目录 选择语句 / 子句比较运算符AND&#xff0c;OR&#xff0c;NOT运算符IN运算符BETWEEN运算符LIKE运算符REGEXP运算符 选择语句 / 子句 USE&#xff1a;选择使用的databaseSELECT&#xff1a;选择查询的列FROM&#xff1a;选择查询的表WHERE&#xff1a;条件查询ORDER B…...

金蝶云星空的网络控制设置

文章目录 金蝶云星空的网络控制设置说明网控参数加入网络控制清除网络控制清除网络控制&#xff08;单个&#xff09;清除网络控制&#xff08;批量&#xff09;清除网络控制&#xff08;批量&#xff0c;参数是拼接好的业务对象&#xff09; 金蝶云星空的网络控制设置 说明 …...

linux服务器国内源安装nvm,又快又方便

国内安装nvm的话&#xff0c;如果你的服务器不能访问github&#xff0c;那么使用gitee快速安装还是很方便的&#xff1a; # 能方位github的话&#xff0c;使用这条命令 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash# 不能访问github的话…...

noip模拟赛多校第八场 T3 遥控机器人 (最短路 + 技巧拆点)

题面 简要题意&#xff1a; 给你一个 n n n 个点 m m m 条边的图。边 i i i 有颜色 c i c_i ci​。你可以选择一些边改变它们的颜色成为区间 [ 1 , m ] [1, m] [1,m] 中的任意颜色&#xff0c;改变一条边 i i i 一次的代价是 w i w_i wi​。询问你能否在一些改变…...

高防IP的原理

高防IP&#xff0c;把域名解析到高防IP上(web事务只要把域名指向高防IP 即可。非web事务&#xff0c;把事务IP换成高防IP即可)一起在高防IP上设置转发规矩;所有公网流量都会走高防IP&#xff0c;通过端口协议转发的方法将用户的拜访通过高防IP转发到源站IP&#xff0c;一起将歹…...

告别公网IP和路由器设置:用cpolar免费隧道实现Home Assistant外网控制

零门槛实现Home Assistant远程控制&#xff1a;无需公网IP的内网穿透方案 想象一下这样的场景&#xff1a;你正躺在异国酒店的床上&#xff0c;突然想起出门前忘记关闭客厅的智能灯。或者&#xff0c;你在公司加班时&#xff0c;想提前打开家中的空调。对于智能家居爱好者来说&…...

springboot-vue基于web的同城医院陪诊服务预约系统设计与实现

目录技术选型与架构设计核心功能模块划分数据库设计要点关键接口示例安全与性能优化测试与部署项目里程碑计划项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术选型与架构设计 后端技术栈 使用Spring Boot 2.7.x框架搭建RE…...

别再让Bug溜走!手把手教你用SVA在UVM里给芯片验证加个“监控探头”

芯片验证工程师的"电子眼"&#xff1a;用SVA在UVM中构建智能监控体系 想象一下&#xff0c;你正在负责一个复杂SoC芯片的验证工作。随着设计规模不断扩大&#xff0c;传统的测试方法就像在黑暗的房间里寻找掉落的针——效率低下且容易遗漏关键问题。这时&#xff0c;…...

从PLC到Kubernetes:工业Python网关高可用配置的6层安全加固体系(含CVE-2024-XXXX漏洞规避方案)

第一章&#xff1a;工业Python网关的演进逻辑与高可用本质工业现场设备协议繁杂、环境严苛、响应实时性要求高&#xff0c;传统嵌入式网关受限于固件封闭、扩展能力弱和生态割裂&#xff0c;难以支撑现代智能制造对数据柔性接入与边缘智能协同的需求。Python凭借其丰富的工业协…...

李慕婉-仙逆-造相Z-Turbo效果展示:精美动漫角色生成案例

李慕婉-仙逆-造相Z-Turbo效果展示&#xff1a;精美动漫角色生成案例 1. 惊艳效果预览&#xff1a;从文字到动漫角色的魔法 输入一段简单的文字描述&#xff0c;就能生成栩栩如生的动漫角色形象——这就是李慕婉-仙逆-造相Z-Turbo模型带来的神奇体验。作为专为《仙逆》角色李慕…...

极简纯净音乐体验:铜钟音乐平台的高效使用指南

极简纯净音乐体验&#xff1a;铜钟音乐平台的高效使用指南 【免费下载链接】tonzhon-music 铜钟 (Tonzhon.com): 免费听歌; 没有直播, 社交, 广告, 干扰; 简洁纯粹, 资源丰富, 体验独特&#xff01;(密码重置功能已回归) 项目地址: https://gitcode.com/GitHub_Trending/to/t…...

OpCore-Simplify:零代码黑苹果配置终极指南,让硬件适配从复杂到简单的蜕变

OpCore-Simplify&#xff1a;零代码黑苹果配置终极指南&#xff0c;让硬件适配从复杂到简单的蜕变 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 对于…...

赣州琴行哪家最可靠

在赣州&#xff0c;选择一家可靠的琴行对于孩子的钢琴启蒙和成长至关重要。今天我们就来聊聊赣州的几家知名琴行&#xff0c;看看哪家最适合您的孩子。1. 可六琴行&#xff1a;专注儿童钢琴启蒙&#xff0c;天天练琴模式为什么选择可六琴行&#xff1f;1.1 专注儿童钢琴启蒙具体…...

DAMOYOLO-S边缘端部署指南:STM32F103C8T6嵌入式平台推理优化

DAMOYOLO-S边缘端部署指南&#xff1a;STM32F103C8T6嵌入式平台推理优化 1. 引言 如果你正在为一个资源极其有限的嵌入式设备寻找一个能跑起来的目标检测方案&#xff0c;比如用一块小小的STM32F103C8T6开发板&#xff0c;那么这篇文章就是为你准备的。你可能已经尝试过一些经…...

别再只调headingPitchRoll了!深入Cesium矩阵变换,从原理到代码理解模型朝向控制

深入Cesium矩阵变换&#xff1a;从数学原理到模型朝向控制的实战指南 在三维地理可视化领域&#xff0c;精确控制模型朝向一直是开发者面临的挑战。许多开发者习惯使用现成的headingPitchRoll方法&#xff0c;但当遇到复杂场景如极地附近模型旋转异常时&#xff0c;往往束手无策…...