gaussian滤波 源码

本文介绍如何使用OpenCV库中的cvSmooth函数和自定义高斯滤波函数来实现图像处理中的高斯滤波操作。通过将彩色图像转化为灰度图像,并应用高斯滤波,有效降低噪声,提升图像质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 #include "highgui.h"  
#include "cv.h"   
#include "string.h"




#pragma comment(lib, "cv.lib")  
#pragma comment(lib, "cxcore.lib")  
#pragma comment(lib, "highgui.lib") 


//高斯滤波函数,在opencv里可以使用cvSmooth    
void gaussianFilter(uchar* data, int width, int height)   
 {     
int i, j, index, sum,m,n;
uchar *tmpdata ; 
int templates[9]={  1,2,1,
2,4,2,
1,2,1} ;
 
    
     sum = height * width * sizeof(uchar);//图像所占内存的大小   
     tmpdata = (uchar*)malloc(sum);   
     memcpy((char*)tmpdata,(char*)data, sum);//将data中的sum个数复制到tmpdata   
    for(i = 1;i < height - 1;i++)   
     {   
         for(j = 1;j < width - 1;j++)   
        {             
             index = sum = 0;   
             for(m = i - 1;m < i + 2;m++)   
             {   
                for(n = j - 1; n < j + 2;n++)   
                 {   
                    sum +=tmpdata[m * width + n]* templates[index++];  //处理   
                }   
                
 
            data[i * width + j] =sum/16;

          }
        }   
     }   
    free(tmpdata);   
 }   
  
  
  
void imgOperate( IplImage* image )  
{  
IplImage* pGrayImg=NULL; 
    cvNamedWindow( "image-in", CV_WINDOW_AUTOSIZE );  
    cvNamedWindow( "image-out", CV_WINDOW_AUTOSIZE);  
    cvShowImage( "image-in", image );  
    /* 
    IplImage* out = cvCreateImage( 
        cvGetSize(image), 
        IPL_DEPTH_8U, 
        3 
    ); 
    */  
      
    //将色彩图像强制转化为灰度图像  
      
  
    pGrayImg=cvCreateImage(cvGetSize(image),8,1);     
    cvCvtColor(image,pGrayImg,CV_RGB2GRAY);  
  //  cvSmooth( image, out, CV_GAUSSIAN, 5,5 );  
  
  
   gaussianFilter((unsigned char*)pGrayImg->imageData,pGrayImg->width,pGrayImg->height);  
    cvShowImage( "image-out", pGrayImg );  
  
    cvReleaseImage( &pGrayImg );  
    cvWaitKey( 0 );   
    cvDestroyWindow("image-in" );  
    cvDestroyWindow("image-out" );      
}  
int main( int argc, char** argv )  
{  
  IplImage* img = cvLoadImage("1.jpg",1);  
  imgOperate( img );  
  cvReleaseImage( &img );  
  return 0;  
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值