如果图像的直方图集中在某一区间,画面表现现的是色彩单一,不利于观察分析,这个时候我们就可以通过对直方图设置上下两个阈值,找到这两个阈值对应的灰度级,分别记为iLow和iHigh,小于iLow的像素点的灰度值置为0,大iHigh的灰度值置为255,位于[iLow iHigh]区间内的点用式子s=T(r)=255*(r-a)/(b-a)来进行重映射,最终的效果是使得这个区间内的像素灰度值分布到0到255上!这里其实有a=iLow,b=iHigh.

下面是按上面的思想写的OpenCV源码:

源码中用到的图像的下载链接为:flower3.jpg_免费高速下载|百度网盘-分享无限制

//OpenCV版本2.4.9  #include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
int main()
{// 图像获取及验证cv::Mat srcImage = cv::imread("flower3.jpg");if( !srcImage.data ) return 1;// 转化为灰度图像cv::Mat srcGray;cvtColor(srcImage, srcGray, CV_BGR2GRAY);// 第一步:计算图像的直方图const int channels[1]={0};const int histSize[1]={256};float hranges[2]={0,255};const float* ranges[1]={hranges};cv::MatND hist;calcHist(&srcGray,1,channels,cv::Mat(),hist,1,histSize,ranges);// 第二步:根据预设参数统计灰度级变换int segThreshold = 50;// 由低到高进行查找int iLow =0;for (; iLow < histSize[0]; iLow++) {if (hist.at<float>(iLow) > segThreshold) {break;}}// 由高到低进行查找int iHigh = histSize[0] -1;for (; iHigh >=0; iHigh--) {if (hist.at<float>(iHigh) > segThreshold) {break;}}// 第三步:建立查找表cv::Mat lookUpTable(cv::Size(1, 256), CV_8U);for (int i =0; i <256; i++) {if (i < iLow ){lookUpTable.at<uchar>(i) =0;} else if (i > iHigh) {lookUpTable.at<uchar>(i) = 255;} else {lookUpTable.at<uchar>(i) = static_cast<uchar>(255.0 * (i - iLow) / (iHigh - iLow + 0.5));}}// 第四步:通过查找表进行映射变换cv::Mat histTransResult;cv::LUT(srcGray, lookUpTable, histTransResult);// 显示图像cv::imshow("srcGray",srcGray);cv::imshow("histTransResult",histTransResult);cv::waitKey(0);return 0;
}

运行果结如下图所示:

OpenCV下设置灰度直方图的阈值来对图像进行查找(查表)变换的源码相关推荐

  1. C++OpenCV下绘制灰度直方图

    C++OpenCV下绘制直方图 直方图的定义:灰度直方图是对一幅灰度图像素分布的统计.对于一幅8Bit量化的图像来说.就是统计在0~255各个灰度级上,像素点的个数或者密度. 在OpenCV库提供了c ...

  2. OpenCV下的灰度直方图生成及显示的源码,带详细注释

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 注:本文的源码来自博客  http://blog ...

  3. JavaScript实现设置或清除数字指定偏移量上的位setBit算法(附完整源码)

    JavaScript实现设置或清除数字指定偏移量上的位setBit算法(附完整源码) setBit.js完整源代码 setBit.js完整源代码 /*** @param {number} number ...

  4. 图像分割——基于二维灰度直方图的阈值处理

    前言 像素灰度值仅仅反映了像素灰度级的幅值大小,并没有反映出像素与邻域的空间相关信息. 二维灰度直方图的概念 二维灰度直方图:像素的灰度值分布和邻域的平均灰度值分布构成的二维直方图 二维直方图的值N( ...

  5. OpenCV:实现灰度直方图和单通道直方图拉伸

    原文链接:http://blog.csdn.net/xiaowei_cqu/article/details/7600666 本文略有修改,如有疑问或者版权问题,请移步原作者或者告知本人. 直接贴代码: ...

  6. 在OpenCV下写的直方图匹配(直方图规定化)C++源码!

    直方图匹配的原理就不多作解释了,我曾经还将MATLAB源码改写成过C源码,详情可见我的博文 根据MATLAB的histeq函数改写的运行在OpenCV下的直方图规定化C源码! 本文已转移到 https ...

  7. 用OpenCV实现图像的水平镜像(翻转)变换和竖直镜像(翻转)变换(垂直镜像变换)的源码

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 直接上源码,本人是参考博文的源码OpenCV2: ...

  8. 画图设置刻度_总结了16个常用的matlibplot画图技巧(附源码)

    ↑↑↑关注后"星标"简说Python 人人都可以简单入门Python.爬虫.数据分析 简说Python推荐 来源:python数据分析之禅 作者:小dull鸟 One old wa ...

  9. python图像灰度直方图统计及显示(原图像,线性拉伸后图像)

    框架构建 ①先导入图像: ②把图像转为矩阵形式储存: ③然后通过函数调用,拿到图像灰度的最大和最小值: ④对图像进行处理,使用公式: ⑤把拉伸之后的矩阵转换为图像: ⑥求取的直方图: ⑦显示图片及拉伸 ...

最新文章

  1. 人脸检测对齐--Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks
  2. OpenCV中HoughLinesP( )检测直线函数返回的坐标的原点
  3. docker 安装azkaban_azkaban安装
  4. 英伟达收购交易取消后 ARM将裁员1000人
  5. toad如何查看表字段备注(表字段的说明)
  6. java 安卓蓝牙程序_求Java大神帮忙,简单修改下安卓蓝牙串口输出程序代码!!急...
  7. protobuf编码原理及其在schema格式转换的应用
  8. java 分页的总页数算法
  9. 2020届 中国农业银行 研发中心 武汉研发部 校招 (面经)
  10. labelme 语义分割数据集_【综述系列】语义分割研究要用到的数据集介绍(一)...
  11. 静态RAM读时序分析
  12. JavaEE | 线程安全(锁、线程间通信、内存可见性、CAS、线程的状态)
  13. 机器学习笔记(四)聚类
  14. 第一次尝试miniprogram-automator
  15. 用哪些特殊的字符方便作为分隔符
  16. openlayers4+中台风路径播放优化
  17. 四川救援直升机飞机失事原因详解
  18. 一文看懂RabbitMQ
  19. emmc flash和nand flash
  20. od机考真题-求n阶方阵里的所有数的和

热门文章

  1. 用python画爱心的代码-怎么用python实现画爱心
  2. python教学视频下载-董付国老师Python精品教学,视频教程下载
  3. python程序员招聘信息-为什么企业很难招聘到好的python程序员?
  4. php和python哪个工资高-Java、Python、Php学哪个好,哪个更有前景?
  5. python程序员一天写多少行代码-程序员写Python时的5个坏习惯,你有几条?
  6. 大学生学python到底有没有有-大学生该不该学Python?太纠结了?
  7. python主要是干什么用的-Python到底可以干什么?主要应用领域
  8. python自学书籍顺序-2018最全各阶段Python学习书籍汇总!
  9. 自学python有哪些方向-机械想自学python可以学习哪个方向?
  10. python编程小学生学好吗-小学生都开始学的Python编程到底是什么?