openvc之亮度与对比度处理
来源:互联网 发布:数据对接子系统 编辑:程序博客网 时间:2024/06/13 13:38
网上收集了两种亮度与对比度的计算公式:
第一种:
一副图像的亮度对比度调节属于图像的灰度线性变换,其公式如下:
y = [x - 127.5 * (1 - B)] * k + 127.5 * (1 + B);
x为调节前的像素值,y为调节后的像素值。
其中B取值[-1,1],调节亮度;
k调节对比度,arctan(k)取值[1,89],所以
k = tan( (45 + 44 * c) / 180 * pi );
其中c取值[-1,1]。通常我们用该值来设置对比度
特别的,
当B=0 时:y = (x - 127.5) * k + 127.5; 这时只调节对比度。
当c=0 时,k = 1:y = x + 255 * B; 这时只调节亮度。第二种:g(i,j)=a*f(i,j)+b
参数f(i,j)表示源图像像素
参数g(i,j)表示输出图像像素
参数a(需要满足a>0)被称为增益(gain),常常被用来控制图像的对比度
参数b通常被称为偏置,常常被用来控制图像的亮度。
我更倾向于使用后者,公式简单,经过测试,后者出入比较小。
NDK代码如下:
JNIEXPORT jintArray JNICALLJava_com_xy_opencv_ndk_1opencv002_MainActivity_lightPixels(JNIEnv *env, jclass type, jintArray pixels_, jint w, jint h) { jint *pixels = env->GetIntArrayElements(pixels_, NULL); //颜色数据转换 ARGB的颜色数据被转成BGRA Mat img(h, w, CV_8UC4, pixels); //获取行数和列数 int row = img.rows; int col = img.cols; //亮度 double b = 50; //对比度 (值越小图片越灰暗) double c = 0.3; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { //Blue img.at<Vec4b>(i, j)[0] = (uchar) (img.at<Vec4b>(i, j)[0] * c + b); //Green img.at<Vec4b>(i, j)[1] = (uchar) (img.at<Vec4b>(i, j)[1] * c + b); //Red img.at<Vec4b>(i, j)[2] = (uchar) (img.at<Vec4b>(i, j)[2] * c + b); //Alpha img.at<Vec4b>(i,j)[3] = 255; } } int size = w * h; jintArray result = env->NewIntArray(size); env->SetIntArrayRegion(result,0,size,pixels); env->ReleaseIntArrayElements(pixels_, pixels, 0); return result;}
阅读全文
0 0
- openvc之亮度与对比度处理
- 图像处理之调整亮度与对比度
- 图像处理之调整亮度与对比度
- 图像处理之亮度与对比度
- 图像处理------调整亮度与对比度
- 数字图像处理(3)---亮度与对比度
- python数字图像处理(8):对比度与亮度调整
- python数字图像处理(8):对比度与亮度调整
- python数字图像处理(8):对比度与亮度调整
- C#图片处理之:亮度和对比度的校正
- C#图片处理之:亮度和对比度的校正
- C#图片处理之:亮度和对比度的校正
- opencv学习笔记之调整图像的亮度与对比度
- opencv 亮度与对比度调节
- chapter12_1对比度与亮度调整
- saturate_cast 图像对比度与亮度
- OpenCV之亮度、对比度详解
- Delphi图像处理 -- 亮度/对比度调整
- [转载]省选学习算法(补坑记录)
- 从 webpack 到全面拥抱 Parcel #1 探索 Parcel
- CGlib动态代理复习
- C++内存错误检测工具
- 椭圆检测及提取
- openvc之亮度与对比度处理
- 分治排序算法
- linux 常用命令大全
- cuda与openCV结合编程(一)
- 配置Zabbix所需环境要求
- 正则表达式
- windows下安装MongoDB进度条不动
- 女程序媛与男程序猿的一天
- 为什么程序员发现不了自己的BUG?