OpenCV 3 C++像素操作:RGB转灰度与线性增强
56 浏览量
更新于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++环境下是至关重要的技能。
2020-08-25 上传
2020-08-25 上传
2024-04-28 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38699724
- 粉丝: 6
- 资源: 933
最新资源
- JHU荣誉单变量微积分课程教案介绍
- Naruto爱好者必备CLI测试应用
- Android应用显示Ignaz-Taschner-Gymnasium取消课程概览
- ASP学生信息档案管理系统毕业设计及完整源码
- Java商城源码解析:酒店管理系统快速开发指南
- 构建可解析文本框:.NET 3.5中实现文本解析与验证
- Java语言打造任天堂红白机模拟器—nes4j解析
- 基于Hadoop和Hive的网络流量分析工具介绍
- Unity实现帝国象棋:从游戏到复刻
- WordPress文档嵌入插件:无需浏览器插件即可上传和显示文档
- Android开源项目精选:优秀项目篇
- 黑色设计商务酷站模板 - 网站构建新选择
- Rollup插件去除JS文件横幅:横扫许可证头
- AngularDart中Hammock服务的使用与REST API集成
- 开源AVR编程器:高效、低成本的微控制器编程解决方案
- Anya Keller 图片组合的开发部署记录