C++ RGB图片亮度调整
2016-07-26 16:29
495 查看
int clamp(
const int x)
{
if (x > 255)
return 255;
if (x < 0)
return 0;
return x;
}
参考:C++ Mat 读取imagedata内的数据
const int x)
{
if (x > 255)
return 255;
if (x < 0)
return 0;
return x;
}
int imgBrightness( const Mat srcImg,//输入图片 const float brightness,//亮度比值 Mat &outImg)//输出图片 { if(!srcImg.data){ LOOGE<<"[image error!]"; return -1; } // int nRet = 0; int row, col; int srcWidth, srcHeight; int rgbmeans[3]; double redSum, greenSum, blueSum; double total; int pixelValue; //r、g、b像素值累加 redSum = 0; greenSum = 0; blueSum = 0; // srcWidth = srcImg.cols; srcHeight = srcImg.rows; total = srcWidth * srcHeight; //获取rgb means for(row = 0; row < srcHeight; row++){ auto ptr = srcImg.ptr<uchar>(row); int tr = 0, tg = 0, tb = 0; for(col = 0; col < srcWidth; col++){ tr = ptr[2]; tg = ptr[1]; tb = ptr[0]; redSum += tr; greenSum += tg; blueSum +=tb; ptr += 3; } } rgbmeans[0] = (int)(redSum / total); rgbmeans[1] = (int)(greenSum / total); rgbmeans[2] = (int)(blueSum / total); // 调整亮度 outImg = srcImg.clone(); for(row = 0; row < srcHeight; row++) { auto ptr = srcImg.ptr<uchar>(row); auto qtr = outImg.ptr<uchar>(row); int tr = 0, tg = 0, tb = 0; for(col = 0; col < srcWidth; col++) { //获取r、g、b值 tr = ptr[2]; tg = ptr[1]; tb = ptr[0]; // 均值消减 tr -=rgbmeans[0]; tg -=rgbmeans[1]; tb -=rgbmeans[2]; // 亮度调整 tr += (int)(rgbmeans[0] * brightness); tg += (int)(rgbmeans[1] * brightness); tb += (int)(rgbmeans[2] * brightness); //为目标输出图片赋值 qtr[0] = clamp(tb); qtr[1] = clamp(tg); qtr[2] = clamp(tr); ptr += 3; qtr += 3; } } return nRet; }
参考:C++ Mat 读取imagedata内的数据
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 按右键另存图片只能存BMP
- photoshop去除图片上的水印
- upload上传单张图片
- 图片引发的溢出危机(图)
- C# WinForm控件对透明图片重叠时出现图片不透明的简单解决方法
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C#实现把彩色图片灰度化代码分享
- C#将图片和字节流互相转换并显示到页面上
- C#监控文件夹并自动给图片文件打水印的方法
- 纯CSS实现的当鼠标移上图片添加阴影效果代码
- 如何使用C#从word文档中提取图片
- C#实现打开画图的同时载入图片、最大化显示画图窗体的方法
- C#图片添加水印的实现代码
- C++联合体转换成C#结构的实现方法