资源简介

基于OpenCV自己实现的高斯滤波,Sobel边缘检测,3通道图像分离,彩色图转灰度图,高斯滤波比OpenCV自带的GaussBlur要慢,仅作为理解原理学习之用。工程建议尽量用用OpenCV自带的函数。

资源截图

代码片段和文件信息

#include


#include 
 
using namespace std;
using namespace cv;

void GaussianSmooth(const Mat&srcMat &dstdouble sigma)
{
 sigma=sigma>0?sigma:0;
 int ksize=cvRound(3*sigma)*2+1;//保证ksize是奇数
 assert((ksize&1)==1);
 if(ksize==1)
 {
 dst=src.clone();
 return;
 }
 dst.create(src.size()src.type());
 Mat tmp;
 tmp.create(src.size()src.type());
 double *kernel=new double[ksize];
 double pscale=-1.0/(2*sigma*sigma);
 double c=1.0/(sigma*sqrt(2*CV_PI));
 double sum=0;
 int kcenter=ksize/2;
 int ijk;
 for(i=0;i  {
 int x=i-kcenter;
 kernel[i]=c*exp(pscale*x*x);
 sum+=kernel[i];
 }
 for(i=0;i  kernel[i]/=sum;
 //进行x方向上的高斯模糊
 for(i=0;i  {
 const uchar *pSrc

评论

共有 条评论