//给图像添加高斯噪声,生成随机文件名保存到新的文件夹中,并可用高斯滤波、算术均值滤波、几何均值滤波、谐波均值滤波、逆谐波均值滤波去噪
#include "stdafx.h"
using namespace cv;
using namespace std;
#define MAX_PATH 1024 //最长路径长度
#define GUID_LEN 64
IplImage* AddGuassianNoise(IplImage* src);
//IplImage* GeometryMeanFilter(IplImage* src);
//IplImage* HarmonicMeanFilter(IplImage* src);
//IplImage* InverseHarmonicMeanFilter(IplImage* src);
IplImage* ArithmeticMeanFilter(IplImage* src);
IplImage* GaussianFilter(IplImage* src);
IplImage *Mat_To_IplImage(Mat Transformation_Image);
IplImage* addNoiseDeNoise(Mat srcImage);
void find(char* lpPath,std::vector<const std::string> &fileList);
string uuidCreate(void);
//stringstream create(int m);
//加噪函数
IplImage* addNoiseDeNoise(Mat srcImage)
{
if (!srcImage.data)
{
cout << "读入图片错误!" << endl;
system("pause");
}
IplImage* dst1 = Mat_To_IplImage(srcImage);//Mat转IplImage
IplImage* dst2 = AddGuassianNoise(dst1);//加噪
IplImage* dst=dst2;
//IplImage* dst3 = GaussianFilter(dst2);//去噪
//IplImage* dst=dst3;
return dst;
}
//Mat类型转IplImage类型
IplImage* Mat_To_IplImage(Mat Transformation_Image)
{
IplImage imgImage1=Transformation_Image;
IplImage *Transformation_Image_Ipl=cvCloneImage(&imgImage1);
return Transformation_Image_Ipl;
}
//算术均值滤波器——模板大小5*5/3*3/2*2(效果不错,尤其是2*2)
IplImage* ArithmeticMeanFilter(IplImage* src)
{
IplImage* dst = cvCreateImage(cvGetSize(src),src->depth,src->nChannels);
cvSmooth(src,dst,CV_BLUR,2);
return dst;
}
//高斯滤波器——模板大小5*5/3*3(效果不错,尤其是3*3)
IplImage* GaussianFilter(IplImage* src)
{
IplImage* dst = cvCreateImage(cvGetSize(src),src->depth,src->nChannels);
cvSmooth(src,dst,CV_GAUSSIAN,5,5);
return dst;
}
/*----------------------------
* 功能 : 递归遍历文件夹,找到其中包含的所有文件
*----------------------------
* 函数 : find
* 访问 : public
*
* 参数 : lpPath [in] 需遍历的文件夹目录
* 参数 : fileList [in] 以文件名称的形式存储遍历后的文件
*/
void find(char* lpPath,std::vector<const std::string> &fileList)
{
char szFind[MAX_PATH];
WIN32_FIND_DATA FindFileData;
strcpy(szFind,lpPath);
strcat(szFind,"\\*.*");
HANDLE hFind=::FindFirstFile(szFind,&FindFileData);
if(INVALID_HANDLE_VALUE == hFind) return;
while(true)
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(FindFileData.cFileName[0]!='.')
{
char szFile[MAX_PATH];
strcpy(szFile,lpPath);
strcat(szFile,"\\");
strcat(szFile,(char* )(FindFileData.cFileName));
find(szFile,fileList);
}
}
else
{
//std::cout << FindFileData.cFileName << std::endl;
fileList.push_back(FindFileData.cFileName);
}
if(!FindNextFile(hFind,&FindFileData)) break;
}
FindClose(hFind);
}
////把int类型转成stringstream类型
//stringstream create(int m)
//{
// stringstream ss;
// ss<<m;
// return ss;
//}
//生成随机文件名
string uuidCreate(void)
{
char buffer[GUID_LEN] = { 0 };
GUID guid;
if (CoCreateGuid(&guid))
{
fprintf(stderr, "create guid error\n");
return "";
}
_snprintf(buffer, sizeof(buffer),
"%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X",
guid.Data1, guid.Data2, guid.Data3,
guid.Data4[0], guid.Data4[1], guid.Data4[2],
guid.Data4[3], guid.Data4[4], guid.Data4[5],
guid.Data4[6], guid.Data4[7]);
return buffer;
}
//添加高斯噪声
IplImage* AddGuassianNoise(IplImage* src)
{
IplImage* dst = cvCreateImage(cvGetSize(src),src->depth,src->nChannels);
IplImage* noise = cvCreateImage(cvGetSize(src),src->depth,src->nChannels);
CvRNG rng = cvRNG(-1);
cvRandArr(&rng,noise,CV_RAND_NORMAL,cvScalarAll(0),cvScalarAll(20));//参数可改
cvAdd(src,noise,dst);
return dst;
}
int main()
{
Mat dst2;
std::vector<const std::string> fileList;//定义一个存放结果文件名称的链表
//遍历一次结果的所有文件,获取文件名列表
find("D:\\caffe-master\\data\\recognition\\加噪处理\\9",fileList);//之后可对文件列表中的文件进行相应的操作
//输出文件夹下所有文件的名称
for(int i = 0; i < fileList.size(); i++)
{
////IplImage* dst = cvLoadImage("E:\\加噪处理\\0\\"+fileList[i]);//为什么cvLoadImage不行?
Mat img = imread("D:\\caffe-master\\data\\recognition\\加噪处理\\9\\"+fileList[i],0);//cvtColor(dst1,dst2,CV_BGR2GRAY);
IplImage* dst = addNoiseDeNoise(img);
Mat dst1(dst);//IplImage*转Mat
imwrite("D:\\caffe-master\\data\\recognition\\加噪处理\\10\\"+uuidCreate()+".jpg", dst1);
}
cout << "文件数目:" << fileList.size() << endl;
system("pause");
return 0;
}
////几何均值滤波器(变蓝,效果不好)
//IplImage* GeometryMeanFilter(IplImage* src)
//{
// IplImage* dst = cvCreateImage(cvGetSize(src),src->depth,src->nChannels);
// int row, col;
// int h=src->height;
// int w=src->width;
// double mul[3];
// double dc[3];
// int mn;
// //计算每个像素的去噪后color值
// for(int i=0;i<src->height;i++){
// for(int j=0;j<src->width;j++){
// mul[0]=1.0;
// mn=0;
// //统计邻域内的几何平均值,邻域大小5*5
// for(int m=-2;m<=2;m++){
// row = i+m;
// for(int n=-2;n<=2;n++){
// col = j+n;
// if(row>=0&&row<h && col>=0 && col<w){
// CvScalar s = cvGet2D(src, row, col);
// mul[0] = mul[0]*(s.val[0]==0?1:s.val[0]); //邻域内的非零像素点相乘
// mn++;
// }
// }
// }
// //计算1/mn次方
// CvScalar d;
// dc[0] = pow(mul[0], 1.0/mn);
// d.val[0]=dc[0];
// //统计成功赋给去噪后图像。
// cvSet2D(dst, i, j, d);
// }
// }
// return dst;
//}
//
////谐波均值滤波器——模板大小5*5(变蓝,效果不好)
//IplImage* HarmonicMeanFilter(IplImage* src)
//{
// IplImage* dst = cvCreateImage(cvGetSize(src),src->depth,src->nChannels);
// int row, col;
// int h=src->height;
// int w=src->width;
// double sum[3];
// double dc[3];
// int mn;
// //计算每个像素的去噪后color值
// for(int i=0;i<src->height;i++){
// for(int j=0;j<src->width;j++){
// sum[0]=0.0;
// mn=0;
// //统计邻域,5*5模板
// for(int m=-2;m<=2;m++){
// row = i+m;
// for(int n=-2;n<=2;n++){
// col = j+n;
// if(row>=0 && row<h && col>=0 && col<w){
// CvScalar s = cvGet2D(src, row, col);
// sum[0] = sum[0]+(s.val[0]==0?255:255/s.val[0]);
// mn++;
// }
// }
// }
// CvScalar d;
// dc[0] = mn*255/sum[0];
// d.val[0]=dc[0];
// //统计成功赋给去噪后图像。
// cvSet2D(dst, i, j, d);
// }
// }
// return dst;
//}
//
////逆谐波均值大小滤波器——模板大小5*5(变蓝,效果不好)
//IplImage* InverseHarmonicMeanFilter(IplImage* src)
//{
// IplImage* dst = cvCreateImage(cvGetSize(src),src->depth,src->nChannels);
// //cvSmooth(src,dst,CV_BLUR,5);
// int row, col;
// int h=src->height;
// int w=src->width;
// double sum[3];
// double sum1[3];
// double dc[3];
// double Q=2;
// //计算每个像素的去噪后color值
// for(int i=0;i<src->height;i++){
// for(int j=0;j<src->width;j++){
// sum[0]=0.0;
// sum1[0]=0.0;
// //统计邻域
// for(int m=-2;m<=2;m++){
// row = i+m;
// for(i
没有合适的资源?快使用搜索试试~ 我知道了~
对图像批量加噪去噪
共101个文件
tlog:58个
jpg:9个
pdb:4个
2星 40 下载量 133 浏览量
2017-11-16
11:35:02
上传
评论 2
收藏 30.39MB RAR 举报
温馨提示
对图像库做批量预处理,给图像添加高斯噪声,生成随机文件名保存到新的文件夹中,并可用高斯滤波、算术均值滤波、几何均值滤波、谐波均值滤波、逆谐波均值滤波去噪
资源推荐
资源详情
资源评论
收起资源包目录
对图像批量加噪去噪 (101个子文件)
加噪去噪.vcxprojResolveAssemblyReference.cache 713B
加噪去噪.cpp 8KB
stdafx.cpp 18B
加噪去噪.exe 91KB
加噪去噪.exe 16KB
加噪去噪.vcxproj.filters 1KB
stdafx.h 915B
vc100.idb 1.07MB
加噪去噪.ilk 1.88MB
加噪去噪-bea774db.ipch 85MB
image.jpg 2KB
image4.jpg 1KB
image5.jpg 1KB
image3.jpg 1KB
72.jpg 1KB
salt_pepper_Image.jpg 1KB
quzao.jpg 1KB
image6.jpg 1KB
image2.jpg 1KB
加噪去噪.lastbuildstate 89B
加噪去噪.lastbuildstate 87B
加噪去噪.log 6KB
加噪去噪.Build.CppClean.log 5KB
加噪去噪.log 1KB
加噪去噪.exe.embed.manifest 406B
加噪去噪.exe.intermediate.manifest 381B
加噪去噪.exe.intermediate.manifest 381B
加噪去噪.obj 922KB
stdafx.obj 422KB
加噪去噪.obj 213KB
加噪去噪.pch 31.94MB
加噪去噪.pdb 3.21MB
vc100.pdb 1.99MB
加噪去噪.pdb 555KB
vc100.pdb 540KB
加噪去噪_manifest.rc 198B
加噪去噪.exe.embed.manifest.res 472B
加噪去噪.sdf 36.21MB
加噪去噪.sln 903B
加噪去噪.suo 16KB
CL.read.1.tlog 26KB
link.read.1.tlog 7KB
link.read.1.tlog 6KB
link.command.1.tlog 3KB
link.command.1.tlog 3KB
cl.command.1.tlog 2KB
CL.write.1.tlog 1KB
link.write.1.tlog 910B
mt.read.1.tlog 848B
mt.read.2.tlog 748B
link.write.1.tlog 532B
rc.command.1.tlog 518B
mt.command.1.tlog 468B
mt.command.1.tlog 378B
mt.write.1.tlog 322B
mt.read.1.tlog 322B
rc.write.1.tlog 302B
rc.read.1.tlog 294B
mt.write.1.tlog 290B
CL.write.1.tlog 2B
CL.read.1.tlog 2B
link.6680.write.1.tlog 2B
link.7664.read.1.tlog 2B
link.2368-cvtres.read.1.tlog 2B
link-cvtres.write.1.tlog 2B
link.15424.read.1.tlog 2B
link.12384-cvtres.write.1.tlog 2B
link.6680-cvtres.read.1.tlog 2B
link.8136-cvtres.read.1.tlog 2B
link.6680.read.1.tlog 2B
link.12384-cvtres.read.1.tlog 2B
link.7664-cvtres.read.1.tlog 2B
link.12384.read.1.tlog 2B
link.8144-cvtres.read.1.tlog 2B
link.15424-cvtres.write.1.tlog 2B
link.9080.write.1.tlog 2B
link.8144.read.1.tlog 2B
link.15424.write.1.tlog 2B
link.12384.write.1.tlog 2B
link.6680-cvtres.write.1.tlog 2B
link.2368.read.1.tlog 2B
cl.command.1.tlog 2B
link.2368.write.1.tlog 2B
link.8136-cvtres.write.1.tlog 2B
link.8136.write.1.tlog 2B
link.9080-cvtres.read.1.tlog 2B
link.2368-cvtres.write.1.tlog 2B
link-cvtres.read.1.tlog 2B
link.8136.read.1.tlog 2B
link.9080-cvtres.write.1.tlog 2B
link.8144.write.1.tlog 2B
link.9080.read.1.tlog 2B
link.8144-cvtres.write.1.tlog 2B
link.7664.write.1.tlog 2B
link.15424-cvtres.read.1.tlog 2B
link.7664-cvtres.write.1.tlog 2B
加噪去噪.write.1.tlog 0B
加噪去噪.write.1.tlog 0B
加噪去噪.unsuccessfulbuild 0B
加噪去噪.vcxproj.user 143B
共 101 条
- 1
- 2
资源评论
- jasonyfl2019-06-25使用了openCV的动态链接库,但文件夹里没有这个文件,下载也不能用,哎,我的积分哪Carina_Cao2019-07-23装个opencv就可以了,这个得配置系统环境
- small_flyer2018-08-20缺少文件,不好用
Carina_Cao
- 粉丝: 19
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
- 音乐展示网页、基于Stenography的图像数字水印添加与提取,以及基于颜色矩和Tamura算法的图像相似度评估算法py源码
- 基于EmguCV(OpenCV .net封装),图像数字水印加解密算法的实现,其中包含最低有效位算法,离散傅里叶变换算法+文档书
- 基于matlab+DWT的图像水印项目,数字水印+源代码+文档说明+图片+报告pdf
- (优秀毕业设计)基于python实现的数字图像可视化水印系统的设计与实现,多种数字算法实现+源代码+文档说明+理论演示pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功