1. 为何要获取图片的亮度?有哪些应用场合?

在工厂或者其他工业生产过程中,需要提取目前场景的亮度。比如,检测手机的闪光灯功能是否正常。

2. 算法实现

2.1 图象转成HSV格式

HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。
这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)。
色调H - 用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;
饱和度S - 饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。
明度V - 明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。

我们可以将图象转成HSV格式,利用明度V进行计算。步骤如下,

1. 将图像转成HSV格式;

2. 提取明度V并计算其均值。

这样就可以取得图象的亮度值。当然,也可以根据需要对图象的局部进行亮度的计算。

Android示例代码如下,

private void getBrightnessHsv() {Mat src = new Mat();Mat hsv = new Mat();Utils.bitmapToMat(selectbp, src);Imgproc.cvtColor(src, hsv, Imgproc.COLOR_RGB2HSV);Scalar avg =Core.mean(hsv);Toast.makeText(this, "the average brightness(HSV) is " + avg.val[2], Toast.LENGTH_LONG).show();}

2.2 图象转成灰度图

灰度图,Gray Scale Image 或是Grey Scale Image,又称灰阶图。把白色与黑色之间按对数关系分为若干等级,称为灰度。灰度分为256阶。
什么叫灰度图?任何颜色都有红、绿、蓝三原色组成,假如原来某点的颜色为RGB(R,G,B),那么,我们可以通过下面几种方法,将其转换为灰度:
1.浮点算法:Gray=R*0.3+G*0.59+B*0.11
2.整数方法:Gray=(R*30+G*59+B*11)/100
3.移位方法:Gray =(R*76+G*151+B*28)>>8;
4.平均值法:Gray=(R+G+B)/3;
5.仅取绿色:Gray=G;
通过上述任一种方法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了。

这里我们使用OpenCV提供的函数来转换为灰度图,步骤如下,

1. 转成灰度图

2. 计算灰度图的均值。

下面看看网上的一份sample code(C),代码参考链接如下,

https://blog.csdn.net/donger_soft/article/details/39522599?utm_source=blogxgwz9

double get_avg_gray(IplImage *img)
{IplImage *gray = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);cvCvtColor(img,gray,CV_RGB2GRAY);CvScalar scalar = cvAvg(gray);cvReleaseImage(&gray);return scalar.val[0];
}

下面是Android中的代码,

private void getBrightnessGray() {Mat src = new Mat();Mat gray = new Mat();Utils.bitmapToMat(selectbp, src);Imgproc.cvtColor(src, gray, Imgproc.COLOR_RGB2GRAY);Scalar avg =Core.mean(gray);Toast.makeText(this, "the average brightness(Gray) is " + avg.val[0], Toast.LENGTH_LONG).show();}

两种方式都可以,大家可以运行代码进行对比,算出的值差不多。

使用OpenCV获取图片亮度相关推荐

  1. python opencv调节图片亮度与对比度

    python opencv调节图片亮度与对比度 亮度调整是将图像像素的强度整体变大/变小,对比度调整指的是图像暗处变得更暗,亮出变得更亮,从而拓宽某个区域内的显示精度. 创建两个滑动条分别调整对比度和 ...

  2. 2021-01-07 python opencv调节图片亮度与对比度

    python opencv调节图片亮度与对比度 度调整是将图像像素的强度整体变大/变小,对比度调整指的是图像暗处变得更暗,亮出变得更亮,从而拓宽某个区域内的显示精度. 创建两个滑动条分别调整对比度和亮 ...

  3. python连通域标记_使用OpenCV获取图片连通域数量,并用不同颜色标记函

    一,原图和效果图 二,代码 //#########################产生随机颜色######################### cv::Scalar icvprGetRandomCo ...

  4. python opencv获取图片分辨率_python-opencv遍历图片像素,并对像素进行操作

    看代码: def access_pixels(frame): print(frame.shape) #shape内包含三个元素:按顺序为高.宽.通道数 height = frame.shape[0] ...

  5. OpenCV 对图片亮度增强或减弱

    对每个像素点的三通道值进行同步放大,同时保持通道值在0-255之间 将图像中的像素限制在最小值和最大值之间,超过此区间的值赋值为最小值或最大值 图片亮度增强 import cv2 import num ...

  6. python numpy opencv调整图片亮度对比度饱和度

    python 调整图片亮度对比度饱和度 安装依赖库 亮度变换 对比度变换 综合调整(完整代码) (想要完整代码直接划到最后) 原理比较简单,本质上是对图像各个通道的每个像素点做线性变换,对超出范围[0 ...

  7. opencv 实现图片亮度增强和图片美白

    1,图片亮度增强在解析出来的r,g,b基础上增加一定的像素值即可. 代码实现: import cv2 import numpy as np img = cv2.imread('image0.jpg', ...

  8. opencv获取图片像素坐标_利用OpenCV从图片中提取矩形并标注坐标(室内平面地图)(一)

    ​某城市会展中心室内地图 背景 一名室内设计师的日常工作从设计一张会展地图开始.常常有这样的场景:划分除规范的展位后,进入销售阶段,频繁的需要修改这张地图,如展示拆分.合并.换位置.标记已交易. 问题 ...

  9. python opencv改变图片亮度_opencv+python 如何改变图片亮度?

    addWeighted函数:计算两个图像(原图和全黑图)的加权和 dst = cv2.addWeighted(img1, c, blank, 1-c, b) 亮度就是每个像素所有通道都加上b (bri ...

最新文章

  1. WMI技术介绍和应用——查询桌面信息
  2. oracle sql 平均分配 分组_SQL学习二
  3. C语言 找数码是否存在
  4. mysql增量_mysql实时增量备份
  5. 前端学习(2579):组件库使用
  6. c#queue_带有C#示例的Queue.CopyTo()方法
  7. SimpleITK使用深度学习识别肺癌CT DICOM数据集
  8. 父亲购房后去世,房产证还没办,后妈和父亲没结婚,户口簿上有父亲,儿子,妹妹,那房产证应该写谁的名字?
  9. luogu P3810 【模板】三维偏序(陌上花开)
  10. javascript类式继承函数最优版
  11. python爬取内容_Python爬取小说内容
  12. C语言实现校运动会项目管理系统
  13. 盘点12个yyds的微信小程序开源项目
  14. css与javascript小案例,使用css3和javascript开发web拾色器实例代码
  15. java文件恢复软件,误删文件恢复-误删文件恢复大师 v1.1.0 最新版
  16. Spring Boot—Controller 注解
  17. 网页访问localhost出现用户名和密码登录弹窗
  18. 指纹锁的识别与原理及安全性
  19. 几种常用的传播木马的方法
  20. matlab绘制引力场_玩引力场和漂亮的色彩

热门文章

  1. python安装错80072ee2_更新80072EE2错误怎么办_win7报80072ee2原因是什么
  2. Visual Studio 与Visual Studio Code 的区别
  3. 如何使用免费的服务器
  4. Commonjs和Esmodule
  5. SpringBoot集成百度uid-generator唯一ID生成器
  6. java me xizai_GitHub - seven332/XiaZai: A simple Android download library
  7. 第5关:计算存款复利
  8. C51单片机常见元件(以PRECHIN-C51为例)
  9. Android 自定义密码键盘组件,支持多点触控
  10. CR0-4寄存器介绍