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

OPENCV的AT函数

一.AT函数介绍

在 OpenCV 中,at() 是一个模板成员函数,用于访问和修改矩阵或图像中特定位置的元素。它提供了一种直接且类型安全的方式来操作单个像素值,但需要注意其性能和类型匹配问题

AT函数是OPENCV中重要的函数之一,它的作用是修改Mat的矩阵某个像素值,也就是我们要修改图像中的像素点就需要利用AT函数去获取并且修改,AT函数的修改一般需要循环cols和rows。然后对每个像素点进行修改。

二.代码的使用

下面这段代码的作用是调整图像中每个像素的颜色值,以此改变图像的整体色调

Mat mat = imread("frame1.jpg");//循环colsfor (int i = 0; i < mat.rows; i++){//循环rowsfor (int j = 0; j < mat.cols; j++){mat.at<Vec3b>(i,j)[0] = (int)mat.at<Vec3b>(i,j)[0] - 10; //R Channelmat.at<Vec3b>(i,j)[1] = (int)mat.at<Vec3b>(i,j)[1] - 50; //G Channelmat.at<Vec3b>(i,j)[2] = (int)mat.at<Vec3b>(i,j)[2] - 10; //B Channel}}imwrite("frame1_process.jpg", mat);

mat.at<Vec3b>(i,j)[0] 是蓝色(B)通道。

mat.at<Vec3b>(i,j)[1] 为绿色(G)通道。

mat.at<Vec3b>(i,j)[2] 是红色(R)通道。

此代码对每个通道进行了不同程度的减法操作:

蓝色通道数值减少 10。

绿色通道数值减少 50。

红色通道数值减少 10。

这样处理后,图像整体会呈现出偏红的色调,因为绿色通道被大幅削弱了。

1.Vec3b 解析

在 OpenCV 里,Vec3b 代表一个由 3 个字节(Byte)构成的向量,它对应着彩色图像中某个像素的三个通道。这里采用的是 BGR 通道顺序,并非 RGB:

Vec3b 是 OpenCV 中用于表示短向量的模板类,它的完整定义是 Vec<uchar, 3>,也就是包含 3 个无符号字符(unsigned char)的向量。在图像处理方面,它有以下特点:

  1. 每个通道的数值范围是 0 - 255。
  2. 适合表示 8 位无符号的 BGR 图像。
  3. 可以通过索引 [0][1][2] 来访问对应的通道。

下面是完整代码案例

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main() {// 读取图像Mat image = imread("input.jpg");if (image.empty()) {cout << "无法读取图像!" << endl;return -1;}// 遍历每个像素并调整颜色for (int i = 0; i < image.rows; i++) {for (int j = 0; j < image.cols; j++) {// 这里的代码会降低绿色通道的值,让图像偏红image.at<Vec3b>(i,j)[0] = max(0, image.at<Vec3b>(i,j)[0] - 10); // Bimage.at<Vec3b>(i,j)[1] = max(0, image.at<Vec3b>(i,j)[1] - 50); // Gimage.at<Vec3b>(i,j)[2] = max(0, image.at<Vec3b>(i,j)[2] - 10); // R}}// 保存处理后的图像imwrite("output.jpg", image);cout << "图像处理完成!" << endl;return 0;
}

 2.cvtColor函数

 cvtColor是 OpenCV 中用于颜色空间转换的核心函数,可实现不同色彩模式(如 RGB、HSV、灰度图等)之间的相互转换。下面为你详细介绍其作用和使用方法:

void cvtColor(InputArray src,      // 输入图像OutputArray dst,     // 输出图像int code,            // 颜色转换代码(如 COLOR_BGR2GRAY)int dstCn = 0);      // 目标图像的通道数(0 表示自动推导)
转换代码	作用
COLOR_BGR2GRAY	BGR → 灰度图
COLOR_BGR2RGB	BGR → RGB(通道顺序调整)
COLOR_BGR2HSV	BGR → HSV(色调、饱和度、亮度)
COLOR_BGR2YCrCb	BGR → YCrCb(亮度 + 色度)
COLOR_GRAY2BGR	灰度图 → BGR
COLOR_RGBA2RGB	RGBA → RGB(去除透明度通道)

如下是对单通道的mat图像转成灰度图,之后用at函数对其像素进行改变。

http://www.lryc.cn/news/2404294.html

相关文章:

  • 【走好求职第一步】求职OMG——见面课测验4
  • ISO 17387——解读自动驾驶相关标准法规(LCDAS)
  • 智慧零售管理中的客流统计与属性分析
  • Ps:Adobe PDF 预设
  • Python Excel 文件处理:openpyxl 与 pandas 库完全指南
  • 九、【ESP32开发全栈指南: UDP通信服务端】
  • 靶场(二十)---靶场体会小白心得 ---jacko
  • 【EasyExcel】导出时添加页眉页脚
  • ​​高频通信与航天电子的材料革命:猎板PCB高端压合基材技术解析​​
  • 如何区分 “通信网络安全防护” 与 “信息安全” 的考核重点?
  • Java 中 ArrayList、Vector、LinkedList 的核心区别与应用场景
  • WPF技术体系与现代化样式
  • Redis 与 MySQL 数据一致性保障方案
  • Sentry 接口返回 Status Code 429 Too Many Requests
  • 数学建模期末速成 聚类分析与判别分析
  • 【工具教程】PDF电子发票提取明细导出Excel表格,OFD电子发票行程单提取保存表格,具体操作流程
  • 基于STM32的DHT11温湿度远程监测LCD1602显示Proteus仿真+程序+设计报告+讲解视频
  • 分类预测 | Matlab实现CNN-BiLSTM-Attention高光谱数据分类预测
  • 微软推出SQL Server 2025技术预览版,深化人工智能应用集成
  • .net webapi http参数自定义绑定模型
  • RocketMQ入门5.3.2版本(基于java、SpringBoot操作)
  • 使用osqp求解简单二次规划问题
  • Ubuntu创建修改 Swap 文件分区的步骤——解决嵌入式开发板编译ROS2程序卡死问题
  • 【C语言】通用统计数据结构及其更新函数(最值、变化量、总和、平均数、方差等)
  • Spring AI(10)——STUDIO传输的MCP服务端
  • Sklearn 机器学习 缺失值处理 填充数据列的缺失值
  • 猜字符位置游戏-position gasses
  • 宝塔安装配置FRP
  • 元器件基础学习笔记——结型场效应晶体管 (JFET)
  • tableau 实战工作场景常用函数与LOD表达式的应用详解