给图像添加高斯噪声 附源码
#include <stdio.h> #include <math.h> #include <stdlib.h> #include <cv/cv_tools.h> #include <picture/cv_picture.h> using namespace cv; using namespace std; double generateGaussianNoise(double mu, double sigma) { static double V1, V2, S; static int phase = 0; double X; double U1, U2; if (phase == 0) { do { U1 = (double)rand() / RAND_MAX; U2 = (double)rand() / RAND_MAX; V1 = 2 * U1 - 1; V2 = 2 * U2 - 1; S = V1 * V1 + V2 * V2; } while (S >= 1 || S == 0); X = V1 * sqrt(-2 * log(S) / S); } else { X = V2 * sqrt(-2 * log(S) / S); } phase = 1 - phase; return mu + sigma*X; } void addNoise(uint8_t * data, int w, int h,int stride, double mu, double sigma, int k) { for (int i = 0; i<h; i++) { for (int j = 0; j<w; j++) { int of = i*stride + j; float temp = (int)data[of] + k*generateGaussianNoise(mu, sigma); temp = temp>255 ? 255: (temp<0?0 :temp); data[of] = (int)temp; } } } int main() { cv::Mat src = imread("D:/pic/wu.jpg",0); cv::Mat n1=src.clone(); cv::Mat n2 = src.clone(); cv::Mat n3 = src.clone(); int w = src.cols; int h = src.rows; addNoise(n1.data, w,h,w,0, 0, 1); addNoise(n2.data, w, h, w, 0, 5, 1); addNoise(n3.data, w, h, w, 0, 10, 1); myShow(n1); myShow(n2); myShow(n3); cv::waitKey(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】