直方图均衡化C++实现
来源:互联网 发布:浏览器软件下载 编辑:程序博客网 时间:2024/06/14 21:31
直方图均衡化通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。(http://blog.csdn.net/xiajun07061225/article/details/6910129)出自这里。具体细节可以参看《数字图像处理》那本书。
L-1:最大灰度值 M:图像行数 N:图像列数 nj:灰度值为j的像素的个数 Sk:均衡化后的灰度值
#include <iostream>#include <opencv2/opencv.hpp>#include <vector>using namespace std;using namespace cv;int main(){const int grayMax=255;vector<vector<int>>graylevel(grayMax+1);Mat image=imread("Lpic0.jpg",0);Mat img;Mat src;image.copyTo(img);if (!image.data) {return -1;}for (int i = 0; i < image.rows-1; i++){uchar* ptr=image.ptr<uchar>(i);for (int j = 0; j < image.cols-1; j++){int x=ptr[j];graylevel[x].push_back(0);//这个地方写的不好,引入二维数组只是为了记录每一个灰度值的像素个数}}for (int i = 0; i < img.rows-1; i++){uchar* imgptr=img.ptr<uchar>(i);uchar* imageptr=image.ptr<uchar>(i);for (int j = 0; j < img.cols-1; j++){int sumpiexl=0;for (int k = 0; k < imageptr[j]; k++){sumpiexl=graylevel[k].size()+sumpiexl;}imgptr[j]=(grayMax*sumpiexl/(image.rows*image.cols));}}equalizeHist(image,src);imshow("原图",image);imshow("opencv自带",src);imshow("自己实现",img);waitKey(0);return 0;}本文通过自己实现直方图均衡化与opencv自带算法做了比较,效果基本相同
阅读全文
1 0
- c语言实现直方图均衡化
- C语言实现直方图均衡化
- C语言实现直方图统计和直方图均衡化
- 直方图均衡化实现
- 直方图均衡化原理和编码实现(C/C++)
- 直方图均衡化原理和编码实现(C/C++)
- 直方图均衡化原理和编码实现(C/C++)
- 用C++(OpenCV)自己实现彩色直方图均衡化
- 直方图均衡化程序实现
- 直方图均衡化C++实现
- C/C++ OpenCV直方图均衡化
- 直方图均衡化的matlab实现
- 用MATLAB编程实现直方图均衡化
- 直方图均衡化—matlab实现
- 直方图均衡化(matlab实现)
- 直方图均衡化(python实现)
- 直方图均衡化详解及编程实现
- 直方图均衡化详解及编程实现
- 安装android studio报错Failed to install Intel HAXM的解决过程
- Hive安装-window
- Linux目录结构和常用命令
- MD5(五)
- swift3 设置设备方向支持(supportedInterfaceOrientations)
- 直方图均衡化C++实现
- MySQL
- 验证码识别之环境配置
- 转: mysql 主备复制下的可靠性
- if条件语句
- 字符串操作函数之strstr和strpbrk
- 深度探索C++对象之四 --- Function语意学
- LINUX驱动注册过程失败处理不当引起的恶果
- 旋转数组的最小数字