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

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。

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

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;
}

 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.xdnf.cn/news/864901.html

相关文章:

  • 验证负载均衡与弹性伸缩
  • Nginx+Tomcat负载均衡与动静分离架构
  • 保险丝选型
  • Java基础原理与面试高频考点
  • 沉金PCB电路板制造有哪些操作要点需要注意?
  • 论文导读 | 区间数据管理
  • C#由于获取WPF窗口名称造成的异常报错问题
  • SQL 中 NOT IN 的陷阱?
  • 如何确定微服务的粒度与边界
  • 09.MySQL内外连接
  • 4. 数据类型
  • linux 安装 canal 的详细步骤
  • Linux I2C 子系统全解:结构、机制与工程实战
  • Hive开窗函数的进阶SQL案例
  • stm32使用hal库模拟spi模式3
  • git cherry-pick (28)
  • Redis初识
  • 华为ICT和AI智能应用
  • 深入理解系统:UML类图
  • YOLO12 改进|融入 Mamba 架构:插入视觉状态空间模块 VSS Block 的硬核升级
  • OpenCV C++ 学习笔记(六):绘制文本、几何绘图、查找/绘制轮廓
  • [蓝桥杯]取球博弈
  • 【发布实录】云原生+AI,助力企业全球化业务创新
  • Odoo17 技巧 | 如何获取Selection字段的显示值五种方法
  • Cisco IOS XE WLC 任意文件上传漏洞复现(CVE-2025-20188)
  • powershell 安装 .netframework3.5
  • CentOS7 + JDK8 虚拟机安装与 Hadoop + Spark 集群搭建实践
  • .Net Framework 4/C# 集合和索引器
  • C++ 使用 ffmpeg 解码本地视频并获取每帧的YUV数据
  • .NET 9中的异常处理性能提升分析:为什么过去慢,未来快