c# OpenCV入门基础 读取RGB值 Mat.At<Vec3b>(y, x)
OpenCV中Mat.At<T>(y,x)方法用于高效访问和修改Mat对象的像素值,支持多种数据类型:byte(灰度)、Vec3b(BGR彩色)等。Vec3b结构包含3个uchar通道(B、G、R),可通过索引或属性访问。示例代码展示了如何获取图像点击位置的RGB值和坐标信息,包括十六进制颜色代码转换和位置显示。该方法适用于图像处理中的像素级操作,如颜色检测、图像分析等场景。
·
Mat.At<T>(y, x) 是OpenCV中用于访问和修改Mat对象像素值的高效方法。
1. 基本语法和用法
// 基本语法
T pixelValue = mat.At<T>(row, col);
mat.At<T>(row, col) = newValue;
// 其中 T 可以是:
// - byte: 灰度图像
// - Vec3b: BGR彩色图像 (3通道)
// - Vec3f: 浮点型3通道图像
// - double: 双精度灰度图像
// - 其他支持的类型
2. Vec3b 结构详解
Vec3b 表示3个uchar(byte)的向量,用于BGR彩色图像:
// Vec3b 结构定义(简化)
public struct Vec3b
{
public byte Item0; // Blue 通道
public byte Item1; // Green 通道
public byte Item2; // Red 通道
// 通过索引访问
public byte this[int i] { get; set; }
}
// 创建 Vec3b 的几种方式
Vec3b pixel1 = new Vec3b(255, 0, 0); // B=255, G=0, R=0 (蓝色)
Vec3b pixel2 = new Vec3b() { Item0 = 0, Item1 = 255, Item2 = 0 }; // 绿色
例如:

核心代码:
Image src = pictureBox1.Image;
if (src == null) return;
int tx = eX * src.Width / pictureBox1.Width;
int ty = eY * src.Height / pictureBox1.Height;
if (tx > src.Width || ty > src.Height) return;
var vec = rgb.At<Vec3b>(ty, tx);
string tipStr = $"#{Convert.ToInt16(vec.Item2):X2}{Convert.ToInt16(vec.Item1):X2}{Convert.ToInt16(vec.Item0):X2}\r\n";
tipStr += $"RGB({vec.Item2},{vec.Item1},{vec.Item0})\r\n";
tipStr += $"图像位置({tx},{ty})\r\n屏幕位置({pictureBox1.Left + eX},{pictureBox1.Top + eY})";
toolTip1.Show(tipStr, pictureBox1, new System.Drawing.Point(eX + 20, eY + 20));
点击顶部【下载】按钮,可以获取源代码
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)