OpenCV学习笔记(27) 灰度直方图均衡化 练习
来源:互联网 发布:四六级听力软件 编辑:程序博客网 时间:2024/05/16 07:45
#include <opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include"opencv2/imgproc/imgproc.hpp" #include <iostream> #include <math.h>using namespace cv;Mat srcImage;Mat grayImage;Mat histImage; //灰度直方图Mat gray_equalize_image;Mat hist_equalize_image;//画一个白色矩形作为面板在灰度直方图void fill_white(Mat image){rectangle(image, Point(0, 0), Point(image.cols, image.rows), Scalar(255, 255, 255), CV_FILLED);}void histgram(Mat image,std::string imagename){//定义变量,calcHist函数的参数准备Mat dstHist; //输出的结果存储的空间 int dims = 1; //1维float midRanges[] = { 0,256 }; //用于指出直方图每一维的每个bin(份)的上下界范围数组的数组const float*ranges[] = { midRanges };int size = 256; //数值一共分为256组,也就是柱条的数目int channels = 0;int nScale = 2;calcHist(&image, 1, &channels, Mat(), dstHist, dims, &size, ranges);//calcHist 函数调用结束后,dstHist变量中将储存了 直方图的信息 用dstHist的模版函数 at<Type>(i)得到第i个柱条的值 //at<Type>(i, j)得到第i个并且第j个柱条的值 //因为任何一个图像的某个像素的总个数,都有可能会有很多,会超出所定义的图像的尺寸,针对这种情况,先对个数进行范围的限制 //先用 minMaxLoc函数来得到计算直方图后的像素的最大个数 double HistMaxValue;minMaxLoc(dstHist, 0, &HistMaxValue, 0, 0);histImage = Mat::zeros(Size(255 * nScale, 150), CV_8UC3);//定义灰度直方图页面的大小fill_white(histImage);//白底for (int i = 0; i < 256; i++){float fHistValue = dstHist.at<float>(i);//像素为i的直方块大小int nRealHeight = cvRound((fHistValue / HistMaxValue) * 150); //要绘制的高度rectangle(histImage, Point(i*nScale, 254), Point((i + 1)*nScale - 1, 150 - nRealHeight), Scalar(0, 0, 0), CV_FILLED);//从左往右一条一条的绘制~}imshow(imagename, histImage);}bool readImage(){srcImage = imread("400.jpg");imshow("原图", srcImage);if (!srcImage.data){std::cout << "fail to load image" << std::endl;return 0;}}void rgb_to_gray(){grayImage.create(srcImage.size(), CV_8UC3);cvtColor(srcImage, grayImage, CV_BGR2GRAY);}void showImage(Mat Image,std::string Image_name){imshow(Image_name, Image);}void equlizeimage(){equalizeHist(grayImage, gray_equalize_image);}void main(){readImage();rgb_to_gray();showImage(grayImage, "灰度图");histgram(grayImage,"灰度直方图");equlizeimage();showImage(gray_equalize_image, "灰度图均衡化后");histgram(gray_equalize_image, "灰度图均衡化后的直方图");waitKey();}
运行结果如下:
阅读全文
0 0
- OpenCV学习笔记(27) 灰度直方图均衡化 练习
- OpenCV学习笔记(26)灰度直方图 练习
- opencv学习笔记(九)-灰度直方图
- Opencv学习笔记三-直方图点运算(直方图基本点算子、直方图正规化、直方图均衡化)
- 灰度图直方图均衡化(matlab练习程序)
- opencv程序八:灰度直方图均衡化
- 【opencv练习27 - 直方图均衡】
- opencv学习笔记-直方图和均衡化
- opencv 2.x学习笔记(十二)直方图均衡化
- opencv学习笔记9 直方图均衡化并绘制直方图
- opencv 颜色直方图(灰度图,均衡化,对比,描绘颜色直方图)
- 灰度直方图均衡化
- 利用opencv绘制 灰度直方图 RGB直方图 HSV直方图 直方图均衡化
- 灰度直方图均衡化(上)
- 灰度直方图均衡化(下)
- 我的OpenCV学习笔记(13):计算直方图,利用查找表拉伸直方图,直方图均衡
- OpenCV中cvEqualizeHist实现灰度图象直方图均衡化
- 【OpenCV入门指南】第九篇 灰度直方图均衡化
- Activity生命周期启动方式及启动模式
- 大数加法
- Codeforces Round #420 (Div. 2) D
- 线程死锁
- 时间的获取与格式转换
- OpenCV学习笔记(27) 灰度直方图均衡化 练习
- log4j的8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL)
- spring mvc redirect 重定向 跳转并传递参数
- 进程注入后门工具Cymothoa
- TiDB RC3 Release
- iOS
- poj2155 Matrix 二维树状数组
- 在命令行中使用Eclipse MAT工具
- 干货来袭,推荐几款开源的Kotlin的Android项目