📄 18-3.cpp
字号:
// ************************* 程序 18-3 ****************************
/*** 程序功能:
对图像进行反转:如果输入的参数设置为:
[LOW_IN, HIGH_IN] = [0,1] 和 [LOW_OUT, HIGH_OUT] = [1,0]
那么得到输入图像的反转片,运行得到图像反转。
// ***************************************************************/
//
/*
#include "cv.h"
#include "highgui.h"
int ImageAdjust ( IplImage *src, IplImage *dst, double low, double high, // X方向:
double bottom, double top, // Y方向:
double gamma )
{
if ( low <0 &&
low> 1 &&
high <0 &&
high> 1 &&
bottom <0 &&
bottom> 1 &&
top <0 &&
top> 1 &&
low > high )
{
return -1;
}
double low2 = low*255;
double high2 = high*255;
double bottom2 = bottom*255;
double top2 = top*255;
double err_in = high2 - low2;
double err_out = top2 - bottom2;
int x, y;
double val;
//char *src, *result;
// 反转变换
for ( y = 0; y < src->height; y++ )
{
for ( x = 0; x < src->width; x++ )
{
val = ( ( uchar * ) ( src->imageData + src->widthStep * y ) )[x];
val = pow ( ( val - low2 ) / err_in, gamma ) * err_out + bottom2;
if ( val > 255 )
{
val = 255;
} if ( val < 0 )
{
val = 0;
} // src 必须在[low,high]范围里
( ( uchar * ) ( dst->imageData + dst->widthStep * y ) )[x] = ( uchar ) val;
}
}
return 0;
}
int main ( int argc, char **argv )
{
IplImage *src = 0, *dst = 0;
if ( argc != 2 || ( src = cvLoadImage ( argv[1], 0 ) ) == NULL ) // force to gray image
{
return -1;
}
cvNamedWindow ( "src", 1 );
cvNamedWindow ( "result", 1 );
dst = cvCloneImage ( src );
// 输入参数 [0,1] 和 [1,0], gamma=1
if ( ImageAdjust ( src, dst, 0, 1, 1, 0, 1 ) != 0 )
{
return -1;
}
cvShowImage ( "src", src );
cvShowImage ( "result", dst );
cvWaitKey ( 0 );
cvDestroyWindow ( "src" );
cvDestroyWindow ( "result" );
cvReleaseImage ( &src );
cvReleaseImage ( &dst );
return 0;
}
//*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -