对数变换是将窄带低灰度输入图像值映射为一宽带输出值。相对的是输入灰度的高调整值。这种变化可以扩展被压缩的高值图像中的暗像素。相对的是反对数变换的调整值。
#include "math.h"
#include"cv.h"
#include"highgui.h"
//#include <iostream>
using namespace std;
int main(int argc,char **argv)
{
/*IplImage *img=cvLoadImage("F:\HU\testopencv\pp.jpg");
cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);
cvShowImage("Example1",img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("Example1"); */
//图像反转
IplImage *pImg;
IplImage *pImg_gray;
if(argc == 3 && (pImg = cvLoadImage(argv[1],-1))!= 0)
{
pImg_gray = cvCreateImage(cvGetSize(pImg), IPL_DEPTH_8U, 1);
cvCvtColor(pImg,pImg_gray,CV_BGR2GRAY);
int img_width = pImg->width;//image width
int img_height = pImg->height;//image height
uchar *data;
data = (uchar *)pImg_gray->imageData;
for (int i = 0; i < img_height - 1; i++)
{
for (int j = 0; j < img_width - 1; j++)
{
uchar cur = data[i * img_width + j];
//cur = 3 * log((double)cur + 1.0);
cur = 6 * sqrt((float)cur);
if (cur < 0)
{
cur =0;
}
else if(cur > 255)
{
cur =255;
}
}
}
cvSaveImage(argv[2],pImg_gray);
cvNamedWindow("log", 1);//create window
cvShowImage("log", pImg_gray);
cvWaitKey(0);
cvDestroyWindow("canny");
cvReleaseImage(&pImg);
cvReleaseImage(&pImg_gray);
return 0;
}
//printf("%s\n %s\n%s\n", argv[0],argv[1],argv[2]);
return -1;
}