当前位置: 首页 > 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函数对其像素进行改变。

相关文章:

  • 25_05_29docker
  • Windows系统工具:WinToolsPlus 之 SQL Server 日志清理
  • 数据库表中「不是 null」的含义
  • ArcGIS计算多个栅格数据的平均栅格
  • IEC 61347-1:2015 灯控制装置安全标准详解
  • 打卡第36天:模型可视化以及推理
  • React Native开发鸿蒙运动健康类应用的项目实践记录
  • 破解HTTP无状态:基于Java的Session与Cookie协同工作指南
  • 一个完整的时间序列异常检测系统,使用Flask作为后端框架,实现了AE(自编码器)、TimesNet和LSTM三种模型,并提供可视化展示
  • 八:操作系统设备管理之I/O 软件层次结构
  • 微软的新系统Windows12未来有哪些新特性
  • Redis-旁路缓存策略详解
  • Web3时代的数据保护挑战与应对策略
  • 如何流畅播放体育电竞赛事?
  • Java高效批量读取Redis数据:原理、方案与实战案例
  • Leetcode 3088. 使字符串反回文
  • AI智能体,为美业后端供应链注入“智慧因子”(4/6)
  • 六种高阶微分方程的特解(原创:daode3056)
  • win32com.client模块 —— Python实现COM自动化控制与数据交互
  • MySQL 事务的 ACID 四大特性及其实现原理
  • 做网站小程序在哪点拉客户/平台连接
  • wordpress版权图片/邯郸seo营销
  • 个人网站用凡科建站好吗/不受限制的万能浏览器
  • 时尚网站设计/自己做网站流程
  • 怎么往网站里做游戏/全网模板建站系统
  • 网站顺序/网络推广的优势有哪些