云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 图像处理opencv代码

图像处理opencv代码

  • 62 次阅读
  • 3 次下载
  • 2025/6/24 17:39:48

}

void CmymfcDlg::fft2(IplImage* src, IplImage* des) //傅里叶正变换方法 {

//实部、虚部

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, des, CV_DXT_FORWARD); cvReleaseImage(&image_Re); cvReleaseImage(&image_Im); cvReleaseImage(&Fourier); }

void CmymfcDlg::OnBnClickedFft2() { // TODO: 在此添加控件通知处理程序代码 IplImage *src; //源图像 IplImage *Fourier; //傅里叶系数 IplImage *dst ; IplImage *ImageRe; IplImage *ImageIm; IplImage *Image; IplImage *ImageDst; double m,M; double scale; double shift; src = cvLoadImage(rePath,0); //加载源图像,第二个参数表示将输入的图片转为单信道 Fourier = cvCreateImage(cvGetSize(src),IPL_DEPTH_64F,2); dst = cvCreateImage(cvGetSize(src),IPL_DEPTH_64F,2); ImageRe = cvCreateImage(cvGetSize(src),IPL_DEPTH_64F,1);

}

ImageIm = cvCreateImage(cvGetSize(src),IPL_DEPTH_64F,1);

Image = cvCreateImage(cvGetSize(src),src->depth,src->nChannels); ImageDst = cvCreateImage(cvGetSize(src),src->depth,src->nChannels); fft2(src,Fourier); //傅里叶变换 fft2shift(Fourier, Image); //中心化

//cvDFT(Fourier,dst,CV_DXT_INV_SCALE);//实现傅里叶逆变换,并对结果进行缩放 cvSplit(dst,ImageRe,ImageIm,0,0);

cvPow(ImageRe,ImageRe,2); cvPow(ImageIm,ImageIm,2);

cvAdd(ImageRe,ImageIm,ImageRe,NULL); cvPow(ImageRe,ImageRe,0.5);

cvMinMaxLoc(ImageRe,&m,&M,NULL,NULL); scale = 255/(M - m); shift = -m * scale;

//将shift加在ImageRe各元素按比例缩放的结果上,存储为ImageDst //cvConvertScale(ImageRe,ImageDst,scale,shift); cvNamedWindow(\傅里叶谱\cvShowImage(\傅里叶谱\cvReleaseImage(&src); cvReleaseImage(&Image); cvReleaseImage(&ImageIm); cvReleaseImage(&ImageRe); cvReleaseImage(&Fourier); cvReleaseImage(&dst);

cvReleaseImage(&ImageDst);

void CmymfcDlg::fft2shift(IplImage* src, IplImage* dst) //傅里叶变换 { IplImage *image_Re = 0, *image_Im = 0; int nRow, nCol, i, j, cy, cx; double scale, shift, tmp13, tmp24; image_Re = cvCreateImage(cvGetSize(src), IPL_DEPTH_64F, 1); //Imaginary part image_Im = cvCreateImage(cvGetSize(src), IPL_DEPTH_64F, 1); cvSplit( src, image_Re, image_Im, 0, 0 ); // Compute the magnitude of the spectrum Mag = sqrt(Re^2 + Im^2) //计算傅里叶谱 cvPow( image_Re, image_Re, 2.0);

cvPow( image_Im, image_Im, 2.0);

cvAdd( image_Re, image_Im, image_Re); cvPow( image_Re, image_Re, 0.5 );

//对数变换以增强灰度级细节(这种变换使以窄带低灰度输入图像值映射 // Compute log(1 + Mag);

cvAddS( image_Re, cvScalar(1.0), image_Re ); // 1 + Mag cvLog( image_Re, image_Re ); // log(1 + Mag)

//Rearrange the quadrants of Fourier image so that the origin is at the image center nRow = src->height; nCol = src->width;

cy = nRow/2; // image center cx = nCol/2;

//进行中心变换

for( j = 0; j < cy; j++ ){ for( i = 0; i < cx; i++ ){

//中心化,将整体份成四块进行对角交换 tmp13 = CV_IMAGE_ELEM( image_Re, double, j, i); CV_IMAGE_ELEM( image_Re, double, j, i) = CV_IMAGE_ELEM( image_Re, double, j+cy, i+cx); CV_IMAGE_ELEM( image_Re, double, j+cy, i+cx) = tmp13; tmp24 = CV_IMAGE_ELEM( image_Re, double, j, i+cx); CV_IMAGE_ELEM( image_Re, double, j, i+cx) = CV_IMAGE_ELEM( image_Re, double, j+cy, i); CV_IMAGE_ELEM( image_Re, double, j+cy, i) = tmp24; } } //归一化处理将矩阵的元素值归一为[0,255] //[(f(x,y)-minVal)/(maxVal-minVal)]*255 double minVal = 0, maxVal = 0; // Localize minimum and maximum values cvMinMaxLoc( image_Re, &minVal, &maxVal ); // Normalize image (0 - 255) to be observed as an u8 image scale = 255/(maxVal - minVal); shift = -minVal * scale; cvConvertScale(image_Re, dst, scale, shift); cvReleaseImage(&image_Re); cvReleaseImage(&image_Im); }

void CmymfcDlg::OnBnClickedCimage() //图片的反转 { // TODO: 在此添加控件通知处理程序代码 IplImage * cImage = 0; }

cImage = cvCloneImage(TheImage); //这里用克隆函数将原图片复制给cImage

//利用翻转函数cvFlip()将cImage反转 cvFlip(cImage,NULL,0);

ShowImage(cImage,IDC_ShowImg);

cvReleaseImage(&cImage);

void CmymfcDlg::OnBnClickedMirror() //图像的镜像 {

// TODO: 在此添加控件通知处理程序代码 IplImage * cImage = 0;

cImage = cvCloneImage(TheImage); //这里用克隆函数将原图片复制给cImage

//利用翻转函数cvFlip()将cImage反转 cvFlip(cImage,NULL,1); ShowImage(cImage,IDC_ShowImg); cvReleaseImage(&cImage); }

void CmymfcDlg::OnBnClickedCcolor() //图像的反色 {

// TODO: 在此添加控件通知处理程序代码 IplImage * cImage = 0;

cImage = cvCloneImage(TheImage); //这里用克隆函数将原图片复制给cImage //利用函数cvNot()将cImage每个像素点取反 cvNot(TheImage,cImage); ShowImage(cImage,IDC_ShowImg); cvReleaseImage(&cImage); }

void CmymfcDlg::OnBnClickedMedianblur() //非线性滤波之中值滤波 {

搜索更多关于: 图像处理opencv代码 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

} void CmymfcDlg::fft2(IplImage* src, IplImage* des) //傅里叶正变换方法 { //实部、虚部 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 = cvCreateImag

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com