实验内容及实验原理:
1、灰度的线性变换
灰度的线性变换就是将图像中所有的点的灰度按照线性灰度变换函数进行变换。该线性灰度变换函数是一个一维线性函数:f(x)=a*x+b
其中参数a为线性函数的斜率,b为线性函数的在y轴的截距,x表示输入图像的灰度,f(x)表示输出图像的灰度。
要求:输入一幅图像,根据输入的斜率和截距进行线性变换,并显示。
2、灰度拉伸
灰度拉伸和灰度线性变换相似。不同之处在于它是分段线性变换。表达式如下:
其中,x1和x2是分段函数的转折点。
要求:输入一幅图像,根据选择的转折点,进行灰度拉伸,显示变换后的图像。
3、灰度直方图
灰度直方图是灰度值的函数,描述的是图像中具有该灰度值的像素的个数,其横坐标表示像素的灰度级别,纵坐标表示该灰度出现的频率(象素的个数)。
要求:输入一幅图像,显示它的灰度直方图,可以根据输入的参数(上限、下限)显示特定范围的灰度直方图。
4、直方图均衡:要求
1) 显示一幅图像pout.bmp的直方图;
2) 用直方图均衡对图像pout.bmp进行增强;
3) 显示增强后的图像。
实验过程:
打开原图像,创建结果图像:
IplImage *src = cvLoadImage("pout.bmp", 1);//原图
IplImage *dst =cvCreateImage(cvSize(src->width, src->height), IPL_DEPTH_8U, 1);
函数说明:
CVAPI(IplImage*)cvLoadImage( constchar* filename, intiscolorCV_DEFAULT (CV_LOAD_IMAGE_COLOR));
//Iscolor的值:
enum{
/* 8bit, color ornot */ CV_LOAD_IMAGE_UNCHANGED =-1,
/* 8bit, gray */ CV_LOAD_IMAGE_GRAYSCALE =0,
/* ?, color */ CV_LOAD_IMAGE_COLOR =1,
/* any depth, ? */ CV_LOAD_IMAGE_ANYDEPTH =2,
/* ?, any color */ CV_LOAD_IMAGE_ANYCOLOR =4,
/* ?, no rotate */ CV_LOAD_IMAGE_IGNORE_ORIENTATION =128
};
CVAPI(IplImage*) cvCreateImage( CvSizesize, intdepth, intchannels );
@param size Imagewidth and height
@param depth Bitdepth of image elements. See IplImage for valid depths.
@param channelsNumber of channels per pixel. See IplImage for details. This function onlycreates
images withinterleaved channels.
图像显示:
cvNamedWindow("Image", 1);//创建窗口
cvSho