【OpenCV + VS】OpenCV中的图像像素读写
在OpenCV中,图像是以Mat(矩阵)类型存储的。每个像素可以通过访问图像矩阵中的元素来进行读取和修改。理解如何读取和修改图像的像素是图像处理的基础。
一、图像像素的存储结构
-
单通道图像:每个像素用一个数值表示,通常是灰度值(例如0-255的值)。
-
多通道图像:例如BGR图像,每个像素由三个数值表示,分别代表蓝色、绿色和红色的强度。
OpenCV提供了多种方法来访问图像的像素值,我们将介绍几种常用的方法。
二、访问单通道图像像素
对于单通道图像(如灰度图像),每个像素的值直接表示亮度信息。访问像素时,Mat对象的每个元素可以通过at<T>(i, j)来访问,其中T是图像的数据类型(例如uchar)。
示例:读取和修改灰度图像的像素
// 访问单通道图像像素
//读取和修改灰度图像的像素
void rwGrayPic(Mat image = cv::imread("gray.jpg"))
{// 获取图像的大小int rows = image.rows;int cols = image.cols;std::cout << "图像尺寸:" << rows << "行(高)," << cols << "列(宽)" << std::endl;std::cout << "通道数:" << image.channels() << std::endl;Mat gray;cvtColor(image, gray, COLOR_BGR2GRAY);std::cout << "转换后通道数:" << gray.channels() << std::endl; // 若仍为3,则异常// 读取某个像素的值uchar pixel_value = gray.at<uchar>(100, 100); // 读取(100, 100)位置的像素值std::cout << "Pixel value at (100, 100): " << (int)pixel_value << std::endl;// 修改某个像素的值gray.at<uchar>(100, 100) = 255; // 设置(100, 100)位置的像素值为255(白