openCV图像处理笔记

一、cvNameWindow用法

1、定义

int cvNamedWindow( const char* name, int flags=CV_WINDOW_AUTOSIZE );

flags 窗口属性标志。可以选择CV_WINDOW_AUTOSIZE(1)和0两种值。CV_WINDOW_AUTOSIZE这个标志被设置后, 如果用户不能手动改变窗口大小,窗口大小会自动调整以适合被显示图像(参考cvShowImage)。0表示以固定的窗口尺寸显示图像。

cvNamedWindow("高斯噪声",0);

参数0表示图片会填充窗口,窗口可以放大或缩小;参数1表示图片固定大小,窗口可以缩放。


二、DFT变换

方法:

void cvDFT(const CvArr* src, CvArr* dst, int flags);

src;输入数组,实数或者复数

dst:输出数组,和输入数组有相同的类型和大小

flags:变换标志,下面的值的组合:

CV_DXT_FORWARD正向1D或者2D变换,结果不被缩放

CV_DXT_INVERSE逆向1D或者2D变换,结果不被缩放,当然CV_DXT_FORWARD和CV_DXT_INVERSE是互斥的。

注意:

1、利用cvDFT对图像进行处理需要考虑虚部,对虚部进行填0操作。

cvZero(Im);//Im位虚部,Re为实部

cvMerge(Re,Im,0,0,Fourier);

2、图像在进行DFT前要进行归一化处理。

cvZero(Im);

具体傅里叶正变换代码如下:

//傅里叶正变换
void fft2(IplImage *src, IplImage *dst)
{   //实部、虚部
	IplImage *image_Re = 0, *image_Im = 0, *Fourier = 0;
	//   int i, j;
	image_Re = cvCreateImage(cvGetSize(src), IPL_DEPTH_64F, 1);  //实部
	//Imaginary part
	image_Im = cvCreateImage(cvGetSize(src), IPL_DEPTH_64F, 1);  //虚部
	//2 channels (image_Re, image_Im)
	Fourier = cvCreateImage(cvGetSize(src), IPL_DEPTH_64F, 2);
	// Real part conversion from u8 to 64f (double)
	cvConvertScale(src, image_Re, 1, 0);
	// Imaginary part (zeros)
	cvZero(image_Im);
	// Join real and imaginary parts and stock them in Fourier image
	cvMerge(image_Re, image_Im, 0, 0, Fourier);
	// Application of the forward Fourier transform
	cvDFT(Fourier, dst, CV_DXT_FORWARD, 0);
	cvReleaseImage(&image_Re);
	cvReleaseImage(&image_Im);
	cvReleaseImage(&Fourier);
}


你可能感兴趣的:(图像处理,openCV,C++)