OpenCV 3 C++像素操作:RGB转灰度与线性增强

2 下载量 66 浏览量 更新于2024-08-30 1 收藏 280KB PDF 举报
本文档详细介绍了在OpenCV 3中使用C++进行图像像素操作的基本概念和技术。主要关注的是RGB图像到灰度图像的转换以及线性增强的应用。 RGB图像转灰度图 在OpenCV中,RGB图像转换为灰度图通常采用平均值法或亮度分量方法。这里展示了通过计算每个像素的红(R), 绿(G), 蓝(B)分量的平均值来实现这一过程的代码片段: ```cpp Mat src, dst; src = imread("E:/image/image/daibola.jpg"); // ... (检查图片是否加载成功) for (int row = 0; row < src.rows; row++) { for (int col = 0; col < src.cols; col++) { int b = src.at<Vec3b>(row, col)[0]; // R分量 int g = src.at<Vec3b>(row, col)[1]; // G分量 int r = src.at<Vec3b>(row, col)[2]; // B分量 dst.at<Vec3b>(row, col)[0] = max(r, max(g, b)); // 将R、G、B取最大值作为灰度值 dst.at<Vec3b>(row, col)[1] = max(r, max(g, b)); dst.at<Vec3b>(row, col)[2] = max(r, max(g, b)); } } imshow("output", dst); ``` 这段代码遍历源图像的每一个像素,将三个颜色通道的最大值设为新的灰度值,这样可以保留图像中的主要信息,但丢弃了色彩细节。 图像线性增强 线性增强是对图像像素进行线性变换的一种方式,通过调整亮度和对比度,改变图像的整体视觉效果。在这里,作者使用了两个参数α和β来进行线性变换: ```cpp Mat src1, dst; src1 = imread("E:/image/image/im1.jpg"); // ... (检查图片是否加载成功) double alpha = 1.2, beta = -0.5; // 线性变换系数 Mat kernel(1, 1, CV_32F, Scalar(alpha, beta)); // 创建一个1x1的浮点型卷积核 dst = src1 * kernel + Scalar(0); // 应用线性变换 imshow("output", dst); ``` 通过调整α和β的值,可以实现图像的增亮、暗化、对比度提升或降低等效果。`Scalar(0)`是偏移量,确保变换后的像素值保持在合适的范围内。 本文档提供了OpenCV 3中基本的图像像素操作实践,包括RGB图像转灰度图和线性增强,这对于理解和处理图像数据在C++环境下是至关重要的技能。