OpenCV下设置灰度直方图的阈值来对图像进行查找(查表)变换的源码
如果图像的直方图集中在某一区间,画面表现现的是色彩单一,不利于观察分析,这个时候我们就可以通过对直方图设置上下两个阈值,找到这两个阈值对应的灰度级,分别记为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下设置灰度直方图的阈值来对图像进行查找(查表)变换的源码相关推荐
- C++OpenCV下绘制灰度直方图
C++OpenCV下绘制直方图 直方图的定义:灰度直方图是对一幅灰度图像素分布的统计.对于一幅8Bit量化的图像来说.就是统计在0~255各个灰度级上,像素点的个数或者密度. 在OpenCV库提供了c ...
- OpenCV下的灰度直方图生成及显示的源码,带详细注释
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 注:本文的源码来自博客 http://blog ...
- JavaScript实现设置或清除数字指定偏移量上的位setBit算法(附完整源码)
JavaScript实现设置或清除数字指定偏移量上的位setBit算法(附完整源码) setBit.js完整源代码 setBit.js完整源代码 /*** @param {number} number ...
- 图像分割——基于二维灰度直方图的阈值处理
前言 像素灰度值仅仅反映了像素灰度级的幅值大小,并没有反映出像素与邻域的空间相关信息. 二维灰度直方图的概念 二维灰度直方图:像素的灰度值分布和邻域的平均灰度值分布构成的二维直方图 二维直方图的值N( ...
- OpenCV:实现灰度直方图和单通道直方图拉伸
原文链接:http://blog.csdn.net/xiaowei_cqu/article/details/7600666 本文略有修改,如有疑问或者版权问题,请移步原作者或者告知本人. 直接贴代码: ...
- 在OpenCV下写的直方图匹配(直方图规定化)C++源码!
直方图匹配的原理就不多作解释了,我曾经还将MATLAB源码改写成过C源码,详情可见我的博文 根据MATLAB的histeq函数改写的运行在OpenCV下的直方图规定化C源码! 本文已转移到 https ...
- 用OpenCV实现图像的水平镜像(翻转)变换和竖直镜像(翻转)变换(垂直镜像变换)的源码
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 直接上源码,本人是参考博文的源码OpenCV2: ...
- 画图设置刻度_总结了16个常用的matlibplot画图技巧(附源码)
↑↑↑关注后"星标"简说Python 人人都可以简单入门Python.爬虫.数据分析 简说Python推荐 来源:python数据分析之禅 作者:小dull鸟 One old wa ...
- python图像灰度直方图统计及显示(原图像,线性拉伸后图像)
框架构建 ①先导入图像: ②把图像转为矩阵形式储存: ③然后通过函数调用,拿到图像灰度的最大和最小值: ④对图像进行处理,使用公式: ⑤把拉伸之后的矩阵转换为图像: ⑥求取的直方图: ⑦显示图片及拉伸 ...
最新文章
- 人脸检测对齐--Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks
- OpenCV中HoughLinesP( )检测直线函数返回的坐标的原点
- docker 安装azkaban_azkaban安装
- 英伟达收购交易取消后 ARM将裁员1000人
- toad如何查看表字段备注(表字段的说明)
- java 安卓蓝牙程序_求Java大神帮忙,简单修改下安卓蓝牙串口输出程序代码!!急...
- protobuf编码原理及其在schema格式转换的应用
- java 分页的总页数算法
- 2020届 中国农业银行 研发中心 武汉研发部 校招 (面经)
- labelme 语义分割数据集_【综述系列】语义分割研究要用到的数据集介绍(一)...
- 静态RAM读时序分析
- JavaEE | 线程安全(锁、线程间通信、内存可见性、CAS、线程的状态)
- 机器学习笔记(四)聚类
- 第一次尝试miniprogram-automator
- 用哪些特殊的字符方便作为分隔符
- openlayers4+中台风路径播放优化
- 四川救援直升机飞机失事原因详解
- 一文看懂RabbitMQ
- emmc flash和nand flash
- od机考真题-求n阶方阵里的所有数的和
热门文章
- 用python画爱心的代码-怎么用python实现画爱心
- python教学视频下载-董付国老师Python精品教学,视频教程下载
- python程序员招聘信息-为什么企业很难招聘到好的python程序员?
- php和python哪个工资高-Java、Python、Php学哪个好,哪个更有前景?
- python程序员一天写多少行代码-程序员写Python时的5个坏习惯,你有几条?
- 大学生学python到底有没有有-大学生该不该学Python?太纠结了?
- python主要是干什么用的-Python到底可以干什么?主要应用领域
- python自学书籍顺序-2018最全各阶段Python学习书籍汇总!
- 自学python有哪些方向-机械想自学python可以学习哪个方向?
- python编程小学生学好吗-小学生都开始学的Python编程到底是什么?