图像的高斯平滑C++实现
来源:互联网 发布:淘宝ipad为什么便宜 编辑:程序博客网 时间:2024/05/16 06:18
#include<iostream>#include<highgui\highgui.hpp>#include<core/core.hpp> using namespace cv; using namespace std; void GetGuassFilter(float* pfGaussFilter, const int iFilterHeight, const int iFilterWidth, const float fSigma){ cout<<"pfGaussFilter"<<endl; for(int i=0;i<iFilterHeight;i++) { for(int j=0;j<iFilterWidth;j++) { pfGaussFilter[i*iFilterHeight+j]=1.0/exp(((i-iFilterHeight/2)^2+(j-iFilterWidth)^2)); //pfGaussFilter[i*iFilterWidth+j]=1.0/25.0; //cout<<pfGaussFilter[i*iFilterWidth+j]<<" "; } cout<<endl; } float sum=0; for(int j=0;j<iFilterWidth*iFilterHeight;j++) { sum+=pfGaussFilter[j]; } for(int j=0;j<iFilterHeight*iFilterWidth;j++) { pfGaussFilter[j]=pfGaussFilter[j]/sum; }}void GaussFilt2D(uchar* pSrc, uchar* pDst, const int iHeight, const int iWidth, const int iFilterHeight, const int iFilterWidth, const float fSigma){ float* pfGaussFilter=new float[iFilterHeight*iFilterWidth]; GetGuassFilter(pfGaussFilter,iFilterHeight,iFilterWidth,fSigma); float sum=0; int index=0; float current_src=0; for(int i=-iFilterHeight;i<iHeight-1;i++) for(int j=-iFilterWidth;j<iWidth-1;j++) { sum=0; index=0; for(int m=i-iFilterHeight/2;m<i+iFilterHeight/2+1;m++) { for(int n=j-iFilterWidth/2;n<j+iFilterWidth/2+1;n++) { if(m<0||n<0||m>iHeight-1||n>iWidth-1) continue; current_src=(float)pSrc[m*iWidth+n]; sum+=current_src*pfGaussFilter[index++]; } } if(i+iFilterHeight/2>0&&i+iFilterHeight/2<iHeight-1&&j+iFilterWidth/2>0&&j+iFilterWidth/2<iWidth-1) pDst[(i+iFilterHeight/2)*iWidth+j+iFilterWidth/2]=(uchar)sum; //pDst[i*iWidth+j]=(uchar)sum; if(pDst[i*iWidth+j]<0) pDst[i*iWidth+j]=0; if(pDst[i*iWidth+j]>255) pDst[i*iWidth+j]=255; }}void GaussFilt2DFull(uchar* pSrc, uchar* pDst, const int iHeight, const int iWidth, const int iFilterHeight, const int iFilterWidth, const float fSigma){ float* pfGaussFilter=new float[iFilterHeight*iFilterWidth]; GetGuassFilter(pfGaussFilter,iFilterHeight,iFilterWidth,fSigma); float sum=0; int index=0; float current_src=0; for(int i=0;i<iHeight-1;i++) for(int j=0;j<iWidth-1;j++) { sum=0; index=0; for(int m=i-iFilterHeight/2;m<i+iFilterHeight/2;m++) for(int n=j-iFilterWidth/2;n<j+iFilterWidth/2;n++) { if(m<0||n<0||m>iHeight-1||n>iWidth-1) continue; current_src=(float)pSrc[m*iWidth+n]; sum+=current_src*pfGaussFilter[index++]; } //if(i+iFilterHeight/2>0&&i+iFilterHeight/2<iHeight-1&&j+iFilterWidth/2>0&&j+iFilterWidth/2<iWidth-1) pDst[i*iWidth+j]=(uchar)sum; //pDst[i*iWidth+j]=(uchar)sum; if(pDst[i*iWidth+j]<0) pDst[i*iWidth+j]=0; if(pDst[i*iWidth+j]>255) pDst[i*iWidth+j]=255; }}int main() { //读入图片,注意图片路径 //Mat image=imread("D:\\Picture\\lena.jpg"); //Mat image=imread("E:\\Projects\\MyOpenCV\\MyOpenCV\\1.png"); Mat image=imread("C:\\迅雷下载\\图像处理\\Projects\\MyOpenCV\\MyOpenCV\\DIP3ECH06\\Fig0638(a)(lenna_RGB).tif",0); Mat image_Dst=imread("C:\\迅雷下载\\图像处理\\Projects\\MyOpenCV\\MyOpenCV\\DIP3ECH06\\Fig0648(b)(lenna-noise-G-gauss-mean0-var800).tif",0); //Mat image=imread("E:\\Projects\\MyOpenCV\\MyOpenCV\\DIP3ECH06\\Fig0635(middle_row_left_chalk ).tif",0); //Mat image_Dst=imread("E:\\Projects\\MyOpenCV\\MyOpenCV\\DIP3ECH06\\Fig0635(middle_row_left_chalk ).tif",0); const int iHeight=image.rows; const int iWidth=image.cols; uchar* pSrc=image.data;//new uchar[iHeight*iWidth]; uchar* pDst=image_Dst.data;//new uchar[iHeight*iWidth]; //GaussFilt2D(pSrc,pDst,iHeight,iWidth,5,5,1); GaussFilt2DFull(pSrc,pDst,iHeight,iWidth,25,25,1); namedWindow("Origin",1); imshow("Origin",image); //创建一个名字为“Lena”的图像显示窗口,(不提前声明也可以) namedWindow("Lena",1); //显示图像 imshow("Lena",image_Dst); //等待按键 waitKey(); return 0; }
1 0
- 图像的高斯平滑C++实现
- 图像的高斯平滑
- 灰度图像高斯平滑
- 【转】图像高斯平滑
- 高斯平滑滤波的实现与图像内存之间值的复制
- Visual C++-图像平滑滚动效果的VC实现
- 图像平滑之高斯平滑(模糊)
- c#实现图像图像卷积与滤波——高斯平滑
- 图像高斯平滑滤波分析
- 图像高斯平滑滤波分析(转)
- 图像高斯平滑滤波分析
- OPENCV--图像平滑变换(高斯)
- 数字图像处理,高斯平滑滤波的C++实现
- 图像平滑滚动效果的VC实现
- 图像平滑滚动效果的VC实现
- 图像平滑滚动效果的VC实现
- 图像平滑滚动效果的VC实现
- 图像边沿平滑处理的matlab实现
- IIS安装配置
- 数数
- UE4.14 Animation Features
- 前后端接口规范-------实体定义2
- SpringMVC 自定义转换器
- 图像的高斯平滑C++实现
- java:读取图像RGB信息
- ES2015字符串的扩展
- MySQL中的各种引擎
- Eclipse An internal error occurred during: "Initializing Java Tooling"
- 第二章 K-近邻算法 及 手写识别系统
- DFS与回溯法
- 2016年12月10日一周工作总结
- 1017. A除以B