OpenCV下的图像对比度增强之完整代码

原创 2008年09月26日 21:39:00

原图 增强后

// enforce.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include "cv.h"
#include "highgui.h"
#include
#include
int ImageStretchByHistogram(IplImage *src,IplImage *dst);

int _tmain(int argc, _TCHAR* argv[])
{
    IplImage * pImg;   
    pImg=cvLoadImage("c:/lena.jpg",-1);

//创建一个灰度图像
    IplImage* GrayImage = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
    IplImage* dstGrayImage = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
    cvCvtColor(pImg, GrayImage, CV_BGR2GRAY);
    ImageStretchByHistogram(GrayImage,dstGrayImage);

  cvNamedWindow( "dstGrayImage", 1 ); //创建窗口
        cvNamedWindow( "GrayImage", 1 ); //创建窗口
        cvShowImage( "dstGrayImage", dstGrayImage ); //显示图像
        cvShowImage( "GrayImage", GrayImage ); //显示图像
        cvWaitKey(0); //等待按键

  cvDestroyWindow( "dstGrayImage" );//销毁窗口
        cvDestroyWindow( "GrayImage" );//销毁窗口
        cvReleaseImage( &pImg ); //释放图像
        cvReleaseImage( &GrayImage ); //释放图像
        cvReleaseImage( &dstGrayImage ); //释放图像

  return 0;
}

int ImageStretchByHistogram(IplImage *src,IplImage *dst)
/*************************************************
  Function:       
  Description:     因为摄像头图像质量差,需要根据直方图进行图像增强,
                   将图像灰度的域值拉伸到0-255
  Calls:         
  Called By:     
  Input:           单通道灰度图像                 
  Output:          同样大小的单通道灰度图像
  Return:         
  Others:           http://www.xiaozhou.net/ReadNews.asp?NewsID=771
  DATE:               2007-1-5
*************************************************/
{
    //p[]存放图像各个灰度级的出现概率;
    //p1[]存放各个灰度级之前的概率和,用于直方图变换;
    //num[]存放图象各个灰度级出现的次数;

    assert(src->width==dst->width);
    float p[256],p1[256],num[256];
    //清空三个数组
    memset(p,0,sizeof(p));
    memset(p1,0,sizeof(p1));
    memset(num,0,sizeof(num));

    int height=src->height;
    int width=src->width;
    long wMulh = height * width;

    //求存放图象各个灰度级出现的次数
    // to do use openmp
    for(int x=0;x    {
        for(int y=0;y        {
            uchar v=((uchar*)(src->imageData + src->widthStep*y))[x];
            num[v]++;
        }
    }

    //求存放图像各个灰度级的出现概率
    for(int i=0;i<256;i++)
    {
        p[i]=num[i]/wMulh;
    }

    //求存放各个灰度级之前的概率和
    for(int i=0;i<256;i++)
    {
        for(int k=0;k<=i;k++)
            p1[i]+=p[k];
    }

    //直方图变换
    // to do use openmp
    for(int x=0;x    {
        for(int y=0;y        {
            uchar v=((uchar*)(src->imageData + src->widthStep*y))[x];
            ((uchar*)(dst->imageData + dst->widthStep*y))[x]= p1[v]*255+0.5;           
        }
    }

    return 0;

}

ImageStretchByHistogram函数来自:

http://blog.csdn.net/hardVB/archive/2007/01/05/1474880.aspx

OPENCV图像处理提高(一)图像增强

在图像处理学习中会涉及到直方图,直方图很好地表现了图像的灰度信息;同时我们注意到在暗图像中,直方图的分量集中在灰度级的低端;亮图像的灰度值集中在直方图灰度值的高端;低对比度的图像有较窄的直方图,并集中...
  • qq_25819827
  • qq_25819827
  • 2016年07月23日 21:56
  • 2249

opencv2 伸展直方图以提高图像对比度

#include #include #include #include "opencv2/imgproc/imgproc.hpp" using namespace std; using n...
  • yang332233
  • yang332233
  • 2016年03月24日 21:46
  • 560

OpenCV学习笔记(8):增强图像对比度

#include "stdafx.h" #include using namespace cv; int ImgStrong(Mat&img, Mat&result) { //***********...
  • CSDNwei
  • CSDNwei
  • 2015年05月13日 11:12
  • 2000

opencv学习笔记之调整图像的亮度与对比度

图像的亮度与对比度调整 // Change_the_brghtied_img.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #inclu...
  • what_lei
  • what_lei
  • 2017年01月22日 13:11
  • 1528

opencv调整图像亮度与对比度

图像变换的操作一般可以分为下面两种:     1.基于邻域操作进行区域变换,比如卷积操作、特征提取、图像梯度计算、角点检测、图像模糊与蜕化等。     2.基于点操作进行像素的变换,比如图像亮度于对比...
  • weicao1990
  • weicao1990
  • 2016年12月08日 10:17
  • 556

自适应图像对比度增强算法

简介   本篇主要记录下一个图像自适应对比度增强算法实现。参考论文:a_fast_and_adaptive_method_for_image_contrast_enhancement 实现流...
  • u011630458
  • u011630458
  • 2016年12月08日 19:48
  • 1951

图像的局部对比度增强算法

http://www.cnblogs.com/Leo_wl/p/3324760.html 图像的局部对比度增强算法 使用局部标准差实现图像的局部对比度增...
  • xiaotie1005
  • xiaotie1005
  • 2016年01月27日 17:14
  • 2936

opencv(c++)改变图像的对比度和亮度

参考: 1、https://docs.opencv.org/3.2.0/ 2、https://github.com/opencv/opencv/Changing the contrast and ...
  • wc781708249
  • wc781708249
  • 2017年11月05日 11:13
  • 300

增强图像对比度算法原理及matlab代码实现

关于图像增强必须清楚的基本概念 1.图像增强的目的: 1)改善图像的视觉效果, 2)转换为更适合于人或机器分析处理的形式 3)突出对人或机器分析有意义的信息 4)抑制无用信息,提高图像的使用价值 ...
  • liuxiangxxl
  • liuxiangxxl
  • 2017年11月28日 17:20
  • 893

数字图像处理,经典对比度增强算法

直方图均衡化的英文名称是Histogram Equalization.    图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法。直方图拉伸和直方图均衡化是两种最常...
  • EbowTang
  • EbowTang
  • 2014年07月28日 20:24
  • 15625
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenCV下的图像对比度增强之完整代码
举报原因:
原因补充:

(最多只允许输入30个字)