(原)Opencv中直方图均衡和图像动态范围拉伸的代码
转载请注明出处:
http://www.cnblogs.com/darkknightzh/p/5102032.html
参考网址:
http://blog.csdn.net/abcjennifer/article/details/7401921
实际上opencv中有自带的直方图均衡的程序。
1 #include <opencv2/opencv.hpp> 2 #include <opencv2/highgui/highgui.hpp> 3 #include <opencv2/imgproc/imgproc.hpp> 4 using namespace cv; 5 6 /*! 7 * \brief 图像直方图均衡 8 * 9 * \param[in] srcImg 输入图像 10 * \param[in,out] dstImg 输出图像 11 * 12 * \return 0 处理成功 13 * 14 * \date 2016-1-5 10:03:33 15 * 16 */ 17 int HistEQ(Mat& dstImg, const Mat& srcImg) 18 { 19 assert(srcImg.type() == CV_8UC1); 20 21 if (&srcImg != &dstImg) // 当输入和输出相同时,对输出矩阵不需要重新分配空间 22 { 23 dstImg = Mat(srcImg.rows, srcImg.cols, CV_8UC1); 24 } 25 26 double p[256] = { 0 }, num[256] = {0}; 27 28 //计算直方图 29 for (auto i = 0; i < srcImg.rows; i++) 30 { 31 for (auto j = 0; j < srcImg.cols; j++) 32 { 33 uchar val = srcImg.at<uchar>(i, j); 34 num[val]++; 35 } 36 } 37 38 //计算概率分布 39 for (auto i = 0; i < 256; i++) 40 { 41 p[i] = num[i] / (srcImg.rows * srcImg.cols); 42 } 43 44 //计算累计概率分布 45 for (auto i = 1; i < 256; i++) 46 { 47 p[i] += p[i-1]; 48 } 49 50 // 直方图变换 51 for (auto i = 0; i < srcImg.rows; i++) 52 { 53 for (auto j = 0; j < srcImg.cols; j++) 54 { 55 uchar val = srcImg.at<uchar>(i, j); 56 dstImg.at<uchar>(i, j) = static_cast<uchar>(p[val] * 255 + 0.5); 57 } 58 } 59 60 return 0; 61 } 62 63 64 /*! 65 * \brief 图像动态范围拉伸到[0, 255] 66 * 67 * \param[in] srcImg 输入图像 68 * \param[in,out] dstImg 输出图像 69 * 70 * \return 0 处理成功 71 * 72 * \date 2016-1-5 10:03:33 73 * 74 */ 75 int DynamicStretch(Mat& dstImg, const Mat& srcImg) 76 { 77 assert(srcImg.type() == CV_8UC1); 78 if (&srcImg != &dstImg) // 当输入和输出相同时,对输出矩阵不需要重新分配空间 79 { 80 dstImg = Mat(srcImg.rows, srcImg.cols, CV_8UC1); 81 } 82 83 double maxVal = -std::numeric_limits<double>::max(); 84 double minVal = 0; 85 // int minIdx[2] = { 0 }, maxIdx[2] = { 0 }; // minMaxIdx函数返回x,y位置,故此处需要声明的数组大小为2 86 87 minMaxIdx(srcImg, &minVal, &maxVal/*, minIdx, maxIdx*/); // 寻找图像的最大最小值 88 89 for (auto i = 0; i < srcImg.rows; i++) 90 { 91 for (auto j = 0; j < srcImg.cols; j++) 92 { 93 uchar val = srcImg.at<uchar>(i, j); 94 dstImg.at<uchar>(i, j) = static_cast<uchar>(255 * (val - minVal) * 1.0 / (maxVal - minVal)); 95 } 96 } 97 98 return 0; 99 } 100 101 102 /// \brief 主程序 103 int _tmain(int argc, _TCHAR* argv[]) 104 { 105 106 Mat img = imread("E:\\01.jpg", 0); 107 imshow("img", img); 108 109 Mat imgEQ; 110 equalizeHist(img, imgEQ); // opencv自带的直方图均衡的程序 111 imshow("imgEQ", imgEQ); 112 113 Mat imgEQ2; 114 HistEQ(imgEQ2, img); // 调用上面直方图均衡的函数HistEQ 115 imshow("imgEQ2", imgEQ2); 116 117 Mat imgStretch; 118 DynamicStretch(imgStretch, img); // 调用上面动态范围拉伸的函数HistEQ 119 imshow("imgStretch", imgStretch); 120 121 waitKey(0); 122 123 return 0; 124 }
(原)Opencv中直方图均衡和图像动态范围拉伸的代码相关推荐
- OpenCV自适应直方图均衡CLAHE图像和分块大小不能整除的处理
一.引言 最近一个月来都在研究OpenCV 中CLAHE算法的一些问题,如: 图像横向和纵向分块大小与图像的宽和高不能整除怎么处理? CLIP的剪裁是怎么实施的? 解决棋盘效应的具体插值处理过程怎样? ...
- OpenCV中的图像处理 —— 图像阈值+图像平滑+形态转换
OpenCV中的图像处理 -- 图像阈值+图像平滑+形态转换 目录 OpenCV中的图像处理 -- 图像阈值+图像平滑+形态转换 1. 图像阈值 1.1 简单阈值 1.2 自适应阈值 1.3 Otsu ...
- OpenCV中的图像处理 —— 图像梯度+Canny边缘检测+图像金字塔
OpenCV中的图像处理 -- 图像梯度+Canny边缘检测+图像金字塔 目录 OpenCV中的图像处理 -- 图像梯度+Canny边缘检测+图像金字塔 1. 图像梯度 1.1 Sobel和Schar ...
- OpenCV中的立体图像创建深度图
OpenCV中的立体图像创建深度图 1. 效果图 2. 源码 参考 这篇博客将介绍如何从立体图像创建深度图. 1. 效果图 原图 VS 视差图效果如下: 可以看到结果受到高度噪音的污染.通过调整 nu ...
- 【Opencv-Tools(一)】OpenCV中使用多线程处理图像
OpenCV中使用多线程处理图像 引用:https://gist.github.com/yinguobing/7d1318e31f6e3455f30527a39361512a #!/usr/bin/e ...
- C语言使用指针处理opencv中的Mat图像数据
1.在处理图像时,一般直接使用opencv中的imread函数获取图片,但是获取到图片后没有用到opencv中的其他算法时,直接用图片处理就会出现耗时严重的情况,所以需要将图片形式转换成指针数组形式处 ...
- 图像识别中距离变换的原理及作用详解,并附用OpenCV中的distanceTransform实现距离变换的代码
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 距离变换的定义是计算一个图像中非零像素点到最近的 ...
- opencv中直方图均衡函数cv::equalizeHist()的使用!!严格用程序进行了验证!
最近开始学习OPENCV,通过验证书中的例程,从网上寻找别人的例程和解释,我发现人们多半都是不负责的,各种转载!你们有没有真正验证过???????? 先给一个别人关于cv::equalizeHist( ...
- 事实证明,OpenCV中对RGB图像数据的存储顺序是BGR,而且Scalar()的顺序也是B,G,R
验证程序的源码如下(用到的图像下载链接为Red_pic.jpg_免费高速下载|百度网盘-分享无限制): 图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料 ...
最新文章
- python之父去面试-面试题_个人文章 - SegmentFault 思否
- python求向量与x轴的夹角_2020届石家庄高考模拟题,参数方程解决向量问题
- Hbase:原理和设计
- 大话设计模式--职责连模式 Chain of Resposibility -- C++实现实例
- 微博预计要火一阵的SleepSort之Shell及C实现
- [MyBatisPlus]入门案例
- yapi 接口文档_1分钟docker部署顶尖 API 文档管理系统
- 阻止函数源码在控制台输出
- 洛谷p1338末日的传说(思维好题,数学)
- 批量运行C文件之makefile
- HttpRunnerManager(一)--安装
- python女朋友_教你用Python感知女朋友的情绪变化!
- 《程序员修炼之道》---- 修的是什么
- 如何构建config文件
- matlab 折线图 标记_matlab画折线图标记线
- Gradle入门教程学习笔记
- 记录进行Uniprot转化为Entrez ID的过程
- android 宽度是多少dp,Android开发中dp、dpi、px的区别
- Elasticsearch Query DSL 整理总结(查询)
- 绘王两款便携数位屏同时发售,全贴合防眩光屏配硬笔
热门文章
- android, 模拟器
- SwingUtilities.invokeLater
- 搭建本地blast2go
- 地理计算 | 计算两个坐标点射线的交点(前方交会)
- 单片机ADC0832电压检测程序(充电自动提醒)
- python oledb dbf_在Python中打开和搜索dBase III(DBF)数据库
- 图书管理系统-GUI Mysql 数据库课程设计-更新版
- 引起网络广播风暴的原因
- 树莓派存储方案_还在用笨重的NAS存储服务器?你可以自己动手用树莓派DIY一个...
- python turtle 小乌龟 编辑动画(24)