opencv直方图拉伸
1、首先计算出一幅图像的直方图
//计算直方图
cv::MatND ImageHist::getHist(const cv::Mat &image){ cv::Mat im;
if(image.channels() == 3)
cv::cvtColor(image,im,CV_RGB2GRAY,0);
else
im = image;
float r[2];
r[0] = 0;
r[1] = 255;
const float *ranges[1];
ranges[0] = r;
cv::calcHist(&im,
1,
&channels,
cv::Mat(),
hist,
1,
&histSize,
ranges);
return hist;
} //将直方图生成图像,以便在MFC空间中显示
cv::Mat ImageHist::getHistImage(const cv::Mat &image){ double maxVal = 0;
double minVal = 0;
cv::minMaxLoc(hist,&minVal,&maxVal,0,0);
cv::Mat histImg(histSize,histSize,CV_8U,cv::Scalar(255)); int high = histSize * 0.9;
for (int i = 0;i < histSize;++i)
{
float binVal = hist.at<float>(i);
int inted = binVal / maxVal *high;
cv::line(histImg,
cv::Point(i,histSize),
cv::Point(i,histSize - inted),
cv::Scalar::all(0));
}
return histImg;
}
2、去掉直方图两端bin为0或者小于某一数量的bin并记录去掉后两端的灰度值(mini,maxi),然后利用以下公式对颜色查找表进行拉伸:
cv::Mat ImageHist::stretch(const cv::Mat &image,int minValue /* = 0 */){
int mini = 0;
for (;mini < histSize;++mini)
{
if(hist.at<float>(mini) > minValue)
break;
}
int maxi = histSize - 1;
for (;maxi >= 0;--maxi)
{
if(hist.at<float>(maxi) > minValue)
break;
}
cv::Mat lookup(1,256,CV_8U);
for (int i = 0;i < histSize;++i)
{
if(i < mini)
lookup.at<uchar>(i) = 0;
else if(i > maxi)
lookup.at<uchar>(i) = 255;
else
lookup.at<uchar>(i) =static_cast<uchar>((i - mini) * 255 / (maxi - mini) + 0.5);
}
cv::Mat result;
cv::LUT(image,lookup,result);
return result;
}
结果:
opencv直方图拉伸的更多相关文章
- OpenCV实现灰度直方图和直方图拉伸
原文链接:http://blog.csdn.net/xiaowei_cqu/article/details/7600666 如有疑问或者版权问题,请移步原作者或者告知本人. 灰度直方图是数字图像中最简 ...
- opencv 直方图
1.简介 对输入图像进行直方图均衡化处理,提升后续对象检测的准确率在OpenCV人脸检测的代码演示中已经很常见.此外对医学影像图像与卫星遥感图像也经常通过直方图均衡化来提升图像质量. 图像直方图均衡化 ...
- openCV 直方图统计
直方图显示 #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main(int argc ...
- OPENCV直方图与匹配
直方图可以用来描述不同的参数和事物,如物体的色彩分布,物体的边缘梯度模版以及目标位置的当前假设的概率分布. 直方图就是对数据进行统计的一种方法,并且将统计值定义到一系列定义好的bin(组距)中,获得一 ...
- OpenCV——直方图均衡化(用于图像增强)
#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespac ...
- opencv:直方图操作
示例程序: #include <opencv.hpp> using namespace cv; using namespace std; int main() { Mat src, dst ...
- opencv直方图该怎么画
图像直方图是反映图像中像素分布特性的统计表,一般显示如下: 其中横坐标代表的是图像像素的种类,或者说是灰度级,纵坐标代表的是每一级灰度下像素数或者该灰度级下像素数在所有图像总像素数总所占的百分比. 直 ...
- OpenCV直方图(直方图、直方图均衡,直方图匹配,原理、实现)
1 直方图 灰度级范围为 \([0,L-1]\) 的数字图像的直方图是离散函数 \(h(r_k) = n_k\) , 其中 \(r_k\) 是第\(k\)级灰度值,\(n_k\) 是图像中灰度为 \( ...
- opencv直方图均衡化
#include <iostream> #include "highgui.h" #include "cv.h" #include "cx ...
随机推荐
- How to create .gitignore file in Windows Explorer
How to create .gitignore file I need to add some rules to my .gitignore file, however, I can't find ...
- AngularJS报错:[$injector:unpr] Unknown provider: $templateRequestProvider
在页面中由上到下引用了: angular.js angular-route.js 创建model的时候也写明了依赖: var someApp = angular.module('someApp',[' ...
- rawbytestring
rawbytestring Delphi 定义了 RawByteStrng 类型的字符串,定义如下: RawByteString = type AnsiString($ffff); 关于RawByte ...
- Command /usr/sbin/chown failed with exit code 1?
问题: 解答: 转自:http://stackoverflow.com/questions/7589771/command-usr-sbin-chown-failed-with-exit-code-1
- iOS 程序插件及功能动态更新思路
所用框架及语言 iOS客户端-Wax(开发愤怒的小鸟的连接Lua 和 Objc的框架),Lua,Objc, 服务端-Java(用于返回插件页面) 工具框架链接地址:Wax - https://gith ...
- U转串口驱动安装
在装有Win7 32位系统的台式机上 先卸载旧驱动,再又一次安装. 对设备管理器里的U转串口设备从本地更新驱动.选择下图文件 系统弹出红色提示框(是否安装XXXX驱动),选择安装,随后该设备由无法启动 ...
- 使用开源库 SVPullToRefresh 实现上拉加载下拉刷新
SVPullToRefresh开源库地址 https://github.com/samvermette/SVPullToRefresh 将整个文件夹SVPullToRefresh拖入工程中并引入头文件 ...
- curl win
curl -H "tocken: 123456789" -H "userName: admin" http://39.18.10.2/log/v1/err ...
- 防止Memcached的DDOS攻击另外一个思路
3月3日,国家互联网应急中心通报了一条消息 关于利用memcached服务器实施反射DDoS攻击的情况通报 通告了 memcached 服务器漏洞被黑客利用的情况,笔者的一台服务器也存在漏洞,因此将漏 ...
- 单元测试利器 JUnit 4
引言 毋庸置疑,程序员要对自己编写的代码负责,您不仅要保证它能通过编译,正常地运行,而且要满足需求和设计预期的效果.单元测试正是验证代码行为是否满足预期的有效手段之一.但不可否认,做测试是件很枯燥无趣 ...