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下的图像对比度增强之完整代码

// enforce.cpp : Defines the entry point for the console application.// #include "stdafx.h" #include...

opencv 彩色图像对比度增强

opencv 彩色图像对比度增强 分类: 数字图像、视频处理 C/C++ MFC2012-04-05 15:30 589人阅读 评论(0) 收藏 举报 一般地,图像对比度都是在...

OpenCV 基于RGB三原色的基本线性变换 改变图像颜色和亮度 对比度增强算法

1、理论依据 书籍:Computer Vision: Algorithms and Applications 作者:Richard Szeliski 2、改变图像亮度和对比度的原理 这里的图像...
  • TL_TJ
  • TL_TJ
  • 2015年04月03日 14:11
  • 772

OpenCV图像增强——通过扩展灰度范围来增加对比度

OpenCV图像增强——通过扩展灰度范围来增加对比度

彩色图像直方图均衡化及颜色直方图显示 opencv实现 完整代码及详细注释

结果预览: 原图片: 颜色直方图: 直方图均衡化后: 颜色直方图: 完整代码: 运行环境:Win7 64位 / opencv2.3 / vs2010 #include ...

图像拼接实现镜面效果 opencv完整代码 实现(附实验结果)

一、问题重述 对一张图片进行镜面处理,最后实现左右对称,上下对称。 二、实现结果 1.原图: 2.实现结果:左右对称 3.实现结果:上下对称 三、实例代码 ...

OpenCV 学习记录5 图像通道分离、对比度和亮度调整

记录了如何使用图像通道分离函数split、 以及一个图像对比度和亮度调整的小示例,涉及像素点访问和拖拉条的创建。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenCV下的图像对比度增强之完整代码
举报原因:
原因补充:

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