对一幅图像添加高斯噪声

参考别人的程序写的,因为网上对图像添加高斯噪声的程序很难找到,我就自己整理出来一份。

#include "cv.h"  
#include "highgui.h"  
int main()
{
IplImage *img = cvLoadImage("1404.jpg");//原图
cvNamedWindow("Origion"); cvShowImage("Origion", img);


IplImage *img_cvt = cvCloneImage(img);//用来进行对原图像的转换
IplImage *sig= cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);//用来存储单通道图像
IplImage *noise = cvCreateImage(cvGetSize(img), IPL_DEPTH_32F, 1);//存放噪声图像
IplImage *Gimg = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3);//添加高斯噪声的图像;
CvRNG rng = cvRNG(-1);
cvCvtColor(img, img_cvt, CV_BGR2YCrCb);//色彩空间转换;
cvSplit(img_cvt, sig, 0, 0, 0);//将图像分解到单通道,一幅灰度图像

cvRandArr(&rng, noise, CV_RAND_NORMAL, cvScalarAll(0), cvScalarAll(20)); //生成噪声图像 
cvNamedWindow("noise"); cvShowImage("noise", noise);//显示噪声图像;


cvAcc(sig, noise);//相当于noise=y+noise,完成对图像的噪声添加
cvConvert(noise, sig); //将图像sig转换为矩阵noise;
cvMerge(sig, 0, 0, 0, img_cvt); //split的逆运算,图像融合,结果放在img_cvt
cvCvtColor(img_cvt, Gimg, CV_YCrCb2BGR); //将图像变回RGB 
cvNamedWindow("gaussian image"); 
cvShowImage("gaussian image",Gimg);  


cvWaitKey();
cvReleaseImage(&img);
cvReleaseImage(&img_cvt);
cvReleaseImage(&sig);
cvReleaseImage(&noise);
cvReleaseImage(&Gimg);
cvDestroyAllWindows();
return 0;
}

你可能感兴趣的:(学习openCV)