1. data
mat.data是指向OpenCV图像或矩阵数据的指针,通过mat.data,可以获取指向图像像素数据的指针,支持访问、修改图像中的像素值
#include <opencv2/opencv.hpp> int main() { // 读取图像 cv::Mat image = cv::imread("image.jpg", cv::IMREAD_COLOR); // 检查图像是否成功加载 if (image.empty()) { std::cout << "无法加载图像" << std::endl; return -1; } // 获取图像的宽度和高度 int width = image.cols; int height = image.rows; // 获取图像的通道数 int channels = image.channels(); // 遍历图像的像素 for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { // 计算像素的索引 int index = y * width * channels + x * channels; // 访问像素值 unsigned char b = image.data[index]; unsigned char g = image.data[index + 1]; unsigned char r = image.data[index + 2]; // 对像素值进行操作 // ... // 修改像素值 image.data[index] = new_b; image.data[index + 1] = new_g; image.data[index + 2] = new_r; } } // 保存修改后的图像 cv::imwrite("modified_image.jpg", image); return 0; }
2. 像素排列方式
int index = y * width * channels + x * channels
unsigned char b = image.data[index]
unsigned char g = image.data[index + 1]
unsigned char r = image.data[index + 2]
同一像素位置的三个值是相邻的。