照例,先看代码

[cpp] view plain copy  print?
  1. /******************************************************************************
  2. 说明:
  3. 检测亮度,常用方法是计算图片在灰度图上的均值和方差,当存在亮度
  4. 异常时,均值会偏离均值点(可以假设为128),方差也会偏小;通过计
  5. 算灰度图的均值和方差,就可评估图像是否存在过曝光或曝光不足。
  6. ******************************************************************************/
  7. #include "cv.h"
  8. #include "highgui.h"
  9. #include "iostream"
  10. #include "math.h"
  11. using namespace cv;
  12. /************************************************************************************
  13. *函数描述:  light      计算图像的亮度
  14. *函数参数:  image   需要计算的图片
  15. *                     cast      计算出的偏差值,小于1表示比较正常,大于1表示存在亮度异常;
  16. 当cast异常时,da大于0表示过亮,da小于0表示过暗
  17. **************************************************************************************/
[cpp] view plain copy  print?
  1. void light(IplImage * image)
  2. {
  3. IplImage * gray = cvCreateImage(cvGetSize(image), image->depth, 1);
  4. cvCvtColor(image, gray, CV_BGR2GRAY);
  5. double sum = 0;
  6. double avg = 0;
  7. CvScalar scalar;
  8. int ls[256];
  9. for(int i=0; i<256; i++)
  10. ls[i]=0;
  11. for(int i=0;i<gray->height;i++)
  12. {
  13. for(int j=0;j<gray->width;j++)
  14. {
  15. scalar = cvGet2D(gray, i, j);
  16. sum += (scalar.val[0] - 128);
  17. int x= (int)scalar.val[0];
  18. ls[x]++;
  19. }
  20. }
  21. avg = sum/(gray->height * gray->width);
  22. double total = 0;
  23. double mean = 0;
  24. for(int i=0;i<256;i++)
  25. {
  26. total += abs(i-128-avg)* ls[i];
  27. }
  28. mean = total/(gray->height * gray->width);
  29. double cast = abs(avg/mean);
  30. printf("light: %f\n", cast);
  31. if(cast>1)
  32. {
  33. if(avg>0)
  34. printf("light\n");
  35. else printf("dark\n");
  36. }
  37. }
[cpp] view plain copy  print?
  1. int main()
  2. {
  3. CvCapture * capture = cvCreateFileCapture("d:\\picture\\video.avi");
  4. cvNamedWindow("video", CV_WINDOW_AUTOSIZE);
  5. IplImage * frame;
  6. int count = 0;
  7. while(true)
  8. {
  9. count++;
  10. frame = cvQueryFrame(capture);
  11. if(!frame) break;
  12. cvShowImage("video", frame);
  13. if(!(count%10))
  14. {
  15. printf("frame : %d\n", count);
  16. light1(frame);
  17. light2(frame);
  18. light3(frame);
  19. }
  20. if(cvWaitKey(33)==27) break;
  21. }
  22. cvReleaseCapture(&capture);
  23. cvDestroyWindow("video");
  24. return 0;
  25. }

这个不难理解吧

转自:http://blog.csdn.net/u010477528/article/details/39374817

opencv 学习之 亮度检测相关推荐

  1. 【opencv学习】Blob检测斑点

    今天学习blob的可用于斑点检测,其实这个斑点只是普通的这么叫法,专业点是的Blob是图像中共享某些共同属性(例如灰度值)的一组连接的像素. 如下图是今天检测的试验图 算法过程是: 1:Thresho ...

  2. opencv学习-霍夫变换-圆检测

    一.霍夫变换-圆检测 圆检测对噪声比较敏感,所以首先要对图像进行均值滤波 基于效率考虑,opencv中实现霍夫变换圆检测的步骤: 1.检测边缘,发现可能的圆心 2.基于第一步的基础上从候选圆心开始计算 ...

  3. 使用深度学习和OpenCV的早期火灾检测系统

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 创建用于室内和室外火灾检测的定制InceptionV3和CNN架构 ...

  4. java OpenCV 图片清晰度、色偏和亮度检测

    基于OpenCV对图片清晰度.色偏和亮度的检测(java版) 本文链接:https://blog.csdn.net/qq_34997906/article/details/87970817 由来:近期 ...

  5. opencv学习笔记(二):基于肤色的人手检测

    opencv学习笔记(二):基于肤色的人手检测 原文:http://blog.csdn.net/wzmsltw/article/details/50849810 先写了人手的检测程序,下一步基于检测程 ...

  6. OpenCV学习笔记(四十六)——FAST特征点检测features2D OpenCV学习笔记(四十七)——VideoWriter生成视频流highgui OpenCV学习笔记(四十八)——PCA算

    OpenCV学习笔记(四十六)--FAST特征点检测features2D 特征点检测和匹配是计算机视觉中一个很有用的技术.在物体检测,视觉跟踪,三维常年关键等领域都有很广泛的应用.这一次先介绍特征点检 ...

  7. OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope

    OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...

  8. OpenCV学习——轮廓检测

    前言 轮廓检测是传统视觉中非常常用的功能,这里简单记录一下opencv中的轮廓检测算法使用方法,至于理论,后续有机会再去细品. 国际惯例: OpenCV官方的轮廓检测教程python版 OpenCV中 ...

  9. OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack()

    OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack() 参考博客: Harris角点检测原理详解 Harri ...

  10. 深度学习之人脸检测实践-现有框架实现 opencv Face++

    人脸检测通常是人脸识别等复杂任务的第一步操作,目前主流的人脸检测算法:https://zhuanlan.zhihu.com/p/24816781.这里主要记录一些常用的算法实践,目前只有OpenCV提 ...

最新文章

  1. shell脚本批量追踪ip路由走向
  2. 安装PHP可能会出现的错误
  3. Vue中bus的使用
  4. windows的bpython安装方法以及数据库报错--记录
  5. 最大公约数与最小公倍数问题
  6. ubuntu无法安装usb驱动
  7. Cglib 如何实现多重代理?
  8. python中、既可以将数据通过print_整理了8个Python中既冷门又实用的技巧
  9. CF16E Fish(状压+期望dp)
  10. Atitit 查询优化器的流程attilax总结
  11. win10分屏快捷键无法使用_win10分屏快捷键如何使用
  12. ZPL 打印条码、二维码及小票(中文/汉字),生成条码、二维码图片【Asp.Net】-含示例代码
  13. Android实现图片OCR功能
  14. Pycharm一直卡在Uploading PyCharm helpers
  15. Arduino智能物流小车各部分功能代码详解(省工程训练能力综合竞赛)
  16. 软件包应用分享|基于RT-Thread的百度语音识别(二)
  17. Android手机无法使用google地图的问题的解决方案
  18. 九天揽月带你玩转Ardupilot 的EKF2纸老虎
  19. C# AForge的简单使用
  20. mac下脚本自动安装brew

热门文章

  1. STL 关联容器的lower_bound()和upper_bound()
  2. 每天一道剑指offer-栈的压入,弹出序列
  3. linux删除系统日志文件,Linux不小心删除日志文件syslog的解决方法
  4. unity如何得到所有子对象_Unity中获取多级子父节点的对象的两种方式
  5. pcb 布线电容 影响延时_浅谈PCB布局布线对TVS防护效果的影响
  6. 数据结构二叉树的建立代码_二叉树就是这么简单
  7. python preference界面设置_Android设置界面5分钟搞定--Preferences的使用
  8. 23. Django进阶:Django发送邮件
  9. JavaWeb:XML
  10. Cesium:实现漫游飞行