当前位置: 首页 > 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;一起将歹…...

从怀疑到真香!2026我日常办公离不开的这款在线文字转换器太好用了

刚入职那半年我踩过太多坑&#xff1a;一周三次新人培训&#xff0c;怕漏记知识点全程录音&#xff0c;下课手动整理1小时录音要熬3小时&#xff0c;知识点散得根本没法复习&#xff1b;部门周会做完记录&#xff0c;散会就要我出整理好的纪要&#xff0c;赶工赶得饭都吃不上&a…...

FCEUX终极指南:从怀旧游戏到专业调试的完整NES模拟器教程

FCEUX终极指南&#xff1a;从怀旧游戏到专业调试的完整NES模拟器教程 【免费下载链接】fceux FCEUX, a NES Emulator 项目地址: https://gitcode.com/gh_mirrors/fc/fceux FCEUX是一款功能强大的开源NES模拟器&#xff0c;让你在现代电脑上完美重温经典红白机游戏。无论…...

基于LM22678的树莓派硬盘专用电源设计:解决供电不稳与电流冲击

1. 项目概述&#xff1a;为什么我们需要一个“专用”电源&#xff1f;如果你正在用树莓派搭配一块机械硬盘搭建一个家庭服务器或者个人云存储&#xff0c;可能已经遇到了一个不大不小的麻烦&#xff1a;供电不稳。树莓派官方推荐的5V/3A电源&#xff0c;单独带树莓派4B跑满负载…...

新能源车轻量化为什么开始盯上高强镁合金?

续航&#xff0c;是悬在每一台纯电动汽车头上的达摩克利斯之剑。多充一度电、多堆一些正极材料&#xff0c;是一条路&#xff1b;但还有另一条路——把车造得更轻。 SAE&#xff08;美国汽车工程师学会&#xff09;的测算已经被反复引用&#xff1a;整车每减重100千克&#xff…...

基于ESP32与MQTT的家庭环境监测系统:从传感器选型到数据可视化实战

1. 项目概述与核心价值最近几年&#xff0c;我身边越来越多的朋友开始关注家里的空气质量、温湿度这些看不见摸不着&#xff0c;但又实实在在影响生活舒适度和健康的环境指标。从新装修的房子担心甲醛&#xff0c;到有老人小孩的家庭在意PM2.5和二氧化碳浓度&#xff0c;再到南…...

基于Arduino与nRF24L01+的无线传感器平台设计与部署指南

1. 项目概述与设计思路如果你和我一样&#xff0c;喜欢在阳台或者小院子里种点蔬菜瓜果&#xff0c;那你肯定也遇到过这样的烦恼&#xff1a;出门几天&#xff0c;心里总惦记着家里的番茄苗是不是缺水了&#xff0c;小温室里的温度会不会太高。传统的温湿度计只能让你在现场读数…...

脉冲神经网络加速器设计与边缘计算优化

1. 脉冲神经网络加速器的设计挑战与突破在边缘计算领域&#xff0c;脉冲神经网络(SNN)正以其独特的生物启发特性引发新一轮技术变革。与传统人工神经网络(ANN)相比&#xff0c;SNN通过离散的脉冲信号传递信息&#xff0c;模拟生物神经元的工作机制&#xff0c;理论上可实现超低…...

企业云盘签章技术方案:从数字签名原理到工程落地

背景 电子签章在企业云盘中的落地&#xff0c;不只是一个"上传盖章图片"的功能实现。本质上&#xff0c;它是一套涉及数字签名、PKI基础设施、文档完整性校验的综合性技术方案。本文从技术选型角度&#xff0c;说清楚企业云盘内置签章需要解决哪些问题、主流实现方案…...

NanaZip:现代Windows文件压缩问题的终极解决方案

NanaZip&#xff1a;现代Windows文件压缩问题的终极解决方案 【免费下载链接】NanaZip The 7-Zip derivative intended for the modern Windows experience 项目地址: https://gitcode.com/gh_mirrors/na/NanaZip 还在为Windows文件压缩工具界面老旧、功能单一而烦恼吗&…...

基于TESS光变曲线与深度学习的O型星物理参数预测研究

1. 项目概述与核心挑战在恒星天体物理研究中&#xff0c;大质量O型星扮演着至关重要的角色。它们不仅是宇宙中光度最高的天体之一&#xff0c;其强烈的辐射、恒星风和最终的超新星爆发&#xff0c;更是驱动星系化学演化和能量注入星际介质的关键引擎。然而&#xff0c;深入理解…...