图像噪声--添加噪声

news2024/11/26 4:25:09

椒盐噪声

        椒盐噪声就是给图片添加黑白噪点,椒指的是黑色的噪点(0,0,0),盐指的是白色的噪点(255,255,255),通过num来控制噪声多少,值越大添加的噪声越多,图像损坏的更加严重。

void add_salt_pepper_noise(Mat& src,Mat& dst,int num)
{
    dst = src.clone();

    unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
    std::default_random_engine generator (seed);

    std::uniform_int_distribution<int> distribute_x(0, src.cols - 1);//包含max
    std::uniform_int_distribution<int> distribute_y(0, src.rows - 1);//包含max

    //black
    for(int i = 0;i < num;i ++){
        int x = distribute_x(generator);
        int y = distribute_y(generator);
        dst.at<Vec3b>(y,x) = Vec3b(0,0,0);
    }

    //white
    for(int i = 0;i < num;i ++){
        int x = distribute_x(generator);
        int y = distribute_y(generator);
        dst.at<Vec3b>(y,x) = Vec3b(255,255,255);
    }
}

下图是设置num=1000时产生的噪声图像: 

 

高斯噪声

        高斯噪声就是给图片添加一个服从高斯分布的噪声,可以通过调节高斯分布标准差sigma的大小来控制添加噪声程度,sigma越大添加的噪声越多图片损坏的越厉害.

void add_gassion_noise(Mat& src,Mat& dst,int mean,int sigma)
{
    dst = src.clone();

    Mat _gassion = Mat::zeros(src.rows,src.cols,CV_8UC3);
    cv::RNG rng;
    rng.fill(_gassion, RNG::NORMAL, mean, sigma);

    dst = dst + _gassion;
}

下图是mean=50,sigma=50时产生的噪声图像: 

随机形状斑点噪声

        随机斑点噪声是通过生成随机的多变形来实现的。

注意以下代码中image是QImage,num表示产生20个斑点。

    Mat _msk = Mat::zeros(image->height(),image->width(),CV_8UC1);
    num = 20;
    Mat kernal = Mat::ones(3,3,CV_8UC1);
    kernal.at<uchar>(0,0) = 0;
    kernal.at<uchar>(0,2) = 0;
    kernal.at<uchar>(2,0) = 0;
    kernal.at<uchar>(2,2) = 0;

    for(int i = 0;i < num;i ++){
        quint32 value = QRandomGenerator::global()->generate();
        int cx = value % (this->width() / 2 - 1);

        value = QRandomGenerator::global()->generate();
        int cy = value % (this->height() - 1);

        std::vector<Point> _polygon;
        int _line_num = 20,_min_radius = 2,_max_radius = 7;
        double _angle_step = 2 * 3.1415926 / _line_num;
        Point center(cx,cy);
        for (int i = 0;i < _line_num;i ++){
            quint32 value = QRandomGenerator::global()->generate();
            double k = value % 100 / 100.0;
            double _angle = _angle_step * i;
            _angle = _angle + (k - 0.5) * _angle_step * 0.25;

            value = QRandomGenerator::global()->generate();
            k = value % 100 / 100.0;
            double radius = _min_radius + k * (_max_radius - _min_radius);

            int x = radius * cos(_angle);
            int y = radius * sin(_angle);

            _polygon.push_back(Point(center.x + x,center.y + y));
        }

        value = QRandomGenerator::global()->generate();
        int c = value % 255;

        cv::fillPoly(_msk,_polygon,Scalar(c));

        //cv::morphologyEx(_msk,_msk,MORPH_DILATE,kernal,Point(-1,-1),1);
    }

    cv::GaussianBlur(_msk,_msk,Size(5,5),0);

    for (int h = 0;h < _msk.rows;h ++)
    {
        uchar *d1 = image->scanLine(h);
        uchar *d2 = _msk.ptr<uchar>(h);
        for (int w = 0;w < _msk.cols;w ++)
        {
            int w4 = 4*w;

            double v = d1[w4 + 0] * (1 - d2[w] / 255.0);
            if (v > 255)v = 255;
            if (v < 0)v = 0;
            d1[w4 + 0] = v;

            v = d1[w4 + 1] * (1 - d2[w] / 255.0);
            if (v > 255)v = 255;
            if (v < 0)v = 0;
            d1[w4 + 1] = v;

            v = d1[w4 + 2] * (1 - d2[w] / 255.0);
            if (v > 255)v = 255;
            if (v < 0)v = 0;
            d1[w4 + 2] = v;
        }
    }

以上代码只产生黑色斑点, 白色斑点只要将合并方式改成加即可:double v = d1[w4 + 0] * (1 + d2[w] / 255.0);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/993314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mojo-SDK详细安装教程

Mojo-SDK安装 运行环境&#xff1a;windows11wsl2&#xff08;ubuntu1804&#xff09; 截至20230909&#xff0c;windows,mac系统暂时不支持 step1: Install VS Code, the WSL extension, and the Mojo extension. step2: Install Ubuntu 22.04 for WSL and open it. step…

Vue el-table 重置按钮设计模板

vue 文件演示模板 <template><el-button icon"el-icon-refresh" size"large" click"resetFunction">重置</el-button><el-tableheight"450"v-loading"loading":data"dataList":row-key&quo…

U盘插上就让格式化是坏了吗?数据怎么恢复

U盘插上就让格式化是坏了吗&#xff1f;当您遇到U盘插上后提示需要格式化的情况时&#xff0c;不要慌张。这种情况并不一定意味着U盘已经坏了。下面我们一起来了解下如何恢复里面的数据&#xff0c;并解决U盘提示格式化的问题。 U盘一插上就提示格式化是什么原因 许多人可能会有…

个人微信多账号聚合管理如何实现?

在日常工作中&#xff0c;您是否会遇到以下问题&#xff1a; 微信号多&#xff0c;需反复切换设备及账号&#xff0c;工作效率低。 无法快速响应客户消息&#xff0c;客户体验感差。 无法随时掌握员工与客户沟通情况&#xff0c;员工沟通质量难以控制&#xff0c;管理难。 员…

Spring系列文章:面向切面编程AOP

一、代理模式 1、代理模式使用场景引入 ⽣活场景1&#xff1a;⽜村的⽜⼆看上了隔壁村⼩花&#xff0c;⽜⼆不好意思直接找⼩花&#xff0c;于是⽜⼆找来了媒婆王妈妈。这 ⾥⾯就有⼀个⾮常典型的代理模式。⽜⼆不能和⼩花直接对接&#xff0c;只能找⼀个中间⼈。其中王妈妈是…

OpenCV 11(图像金字塔)

一、 图像金字塔 **图像金字塔**是图像中多尺度表达的一种&#xff0c;最主要用于图像的分割&#xff0c;是一种以多分辨率来解释图像的有效但概念简单的结构。简单来说, 图像金字塔是同一图像不同分辨率的子图集合. 图像金字塔最初用于机器视觉和图像压缩。其通过梯次向下采…

shell知识点复习

1、shell能做什么&#xff08; Shell可以做任何事(一切取决于业务需求) &#xff09; 自动化批量系统初始化程序 自动化批量软件部署程序 应用管理程序 日志分析处理程序 自动化备份恢复程序 自动化管理程序 自动化信息采集及监控程序 配合Zabbix信息采集 自动化扩容 2、获取当…

淘宝双11数据分析与预测课程案例中(林子雨)错误点总结

问题一&#xff1a;可视化代码中男女买家各个年龄段对比散点图中数值不显示以及坐标不正确问题如下图 解决方法&#xff1a; 1修改坐标 2修改数值 修改后散点图 问题二&#xff1a;各省份的总成交量对比中地图显示不出来 有时间再写

海量小文件传输对于企业选用文件传输软件的重要意义

在当前的商业环境中&#xff0c;数据具有极其重要的作用&#xff0c;是企业竞争的核心要素。随着互联网、物联网和云计算等技术的快速发展&#xff0c;数据的类型和规模变得越来越多样。在这其中&#xff0c;海量小文件作为一种普遍而重要的数据形式&#xff0c;扮演着连接信息…

新知同享 | Mobile 开发轻松跨屏,高效构建

谷歌致力于帮助开发者 更快、更轻松地打造高质量的移动体验 一起来看 2023 Google 开发者大会上 Mobile 开发值得重点关注的成果与更新 了解如何提高平台及应用质量 提升开发效率 使多设备开发体验更流畅 实现轻松跨屏&#xff0c;高效构建 精彩大会现场一览 用户对跨屏幕体验…

在k8s中创建ConfigMap的四种方式与初识helm包管理工具

非敏感数据&#xff0c;比如应用的配置信息&#xff0c;则可以用ConfigMap 创建configmap四种方式 &#xff08;1&#xff09;通过--from-literal&#xff1a; kubectl create configmap myconfigmap --from-literalconfig1xxx --from-literalconfig2yyy 每个--from-literal…

Revit SDK 介绍:Ribbon 界面

前言 Revit 通过 API 将完整的 Ribbon 做了保留&#xff0c;同时这些菜单按钮也可以和相应的命令绑定。 内容 运行效果如下所示&#xff1a; 菜单特写&#xff1a; Ribbon Sample 整体是 API 暴露出来的一个 RibbonPanel&#xff0c;对应的接口&#xff1a; namespace Au…

dll文件反编译源代码 C#反编译 dotpeek反编译dll文件后export

目录 背景下载安装dotpeek导入dll文件export导出文件参考 背景 项目合作的时候&#xff0c;使用前人的或者其他部门dll文件直接在机台运行&#xff0c;会出现很多问题&#xff0c;逻辑&#xff0c;效率等等&#xff0c;此时我们可以选择对他们的代码进行反编译和重构&#xff…

递归算法学习——被围绕的区域,太平洋大西洋流水问题

目录 ​编辑 一&#xff0c;被围绕的区域 1.题意 2.解释 3.题目接口 4.解题思路及代码 二&#xff0c;太平洋大西洋流水问题 1.题意 2.解释 3.题目接口 4.解题思路及代码 一&#xff0c;被围绕的区域 1.题意 给你一个 m x n 的矩阵 board &#xff0c;由若干字符 X 和…

对卷积的一点具象化理解

前言 卷积的公式一般被表示为下式&#xff1a; 对新手来说完全看不懂这是干什么&#xff0c;这个问题需要结合卷积的应用场景来说。 原理 卷积比较广泛的应用是在信号与系统中&#xff0c;所以有些公式的定义会按照信息流的习惯。假设存在一串信号g(x)经过一个响应h(x)时他的响…

高云USB下载器仿真器用户手册(包括在线逻辑分析仪的使用方法)

高云 USB 仿真器用户手册 一.简介 仿真器用于高云 GOWIN 公司所生产的 FPGA&#xff0c;可用于程序下载和调试。主要特点如下&#xff1a; 1.支持宽电压1.2V - 3.6V&#xff1b; 2.速度最高可达30Mb/s&#xff0c;极速完成下载和波形调试功能&#xff1b; 3.完美支持在线逻…

Java实现Modbus读写数据

背景 由于当时项目周期赶&#xff0c;引入了一个PLC4X组件&#xff0c;上手快。接下来就是使用这个组件遇到的一些问题&#xff1a; 关闭连接NioEventLoop没有释放导致oom设计思想是一个设备一个连接&#xff0c;而不是一个网关一个连接连接断开后客户端无从感知 前两个问题解…

什么牌子的电容笔比较好?开学值得买触控笔推荐

大部分学生都没有固定的收入&#xff0c;所以他们选择的商品都是偏向性价比高的。随着iPad的不断升级&#xff0c;它的各种功能也会越来越多&#xff0c;将会慢慢地走进我们的生活和工作中。随着电子设备的不断更新和软件的完善&#xff0c;电容笔的性能也在不断提高&#xff0…

783. 二叉搜索树节点最小距离

783. 二叉搜索树节点最小距离 C代码&#xff1a;二叉树 int min; int pre;int dfs(struct TreeNode* root) {if (root NULL) {return;}dfs(root->left);if (pre ! -1) {min fmin(min, root->val - pre);}pre root->val; // 中序遍历dfs(root->right); }int mi…

【深度学习】 Python 和 NumPy 系列教程(三):Python容器:1、列表List详解(初始化、索引、切片、更新、删除、常用函数、拆包、遍历)

目录 一、前言 二、实验环境 三、Python容器&#xff08;Containers&#xff09; 0、容器介绍 1、列表&#xff08;List&#xff09; 1. 初始化 a. 创建空列表 b. 使用现有元素初始化列表 c. 使用列表生成式 d. 复制列表 2. 索引和切片 a. 索引 b. 负数索引 c. 切…