图像噪声--添加噪声

椒盐噪声

        椒盐噪声就是给图片添加黑白噪点,椒指的是黑色的噪点(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);//包含maxstd::uniform_int_distribution<int> distribute_y(0, src.rows - 1);//包含max//blackfor(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);}//whitefor(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.rhkb.cn/news/126521.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

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

JavaScript中的原型链(prototype chain)

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ JavaScript中的原型链⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏…

手机电脑scoket通信 手机软件 APP inventor 服务端程序python

python scoket 通信 再帮助同学坐课题的时候接触到了scoket通信&#xff0c;了解到这应该是基层网络通信的原理&#xff0c;于是就导出搜索了一下相关的资料&#xff0c;简单来说scoket通信就是&#xff0c;可以让不同设备在同一个网络环境的条件下&#xff0c;可以实现相互通…

视频汇聚/视频云存储/视频监控管理平台EasyCVR安全检查的相关问题及解决方法2.0

开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多…

Ribbon负载均衡+Nacos服务搭建

Ribbon负载均衡 流程 首先通过RibbonLoadBalanceerClient获取服务名&#xff0c;并传给DynamicServerListLoadBalancer——>通过EureKa-server获取服务名对应服务列表(也就是被注册到EureKa中的服务&#xff0c;可能包括不同端口的)&#xff0c;然后我们会根据IRule中的服务…

基于SSM的网络游戏公司官方平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

快手用户活跃度分析(未完成)

目标 为期30天的用户数据&#xff0c;但是不是所有的用户都有30天的信息数据&#xff0c;比如用户A第7天注册的&#xff0c;则其前6天没有数据。 预测未来用户活跃度的可能性。 预测7天后的&#xff0c;基于第7天&#xff0c;预测第14天&#xff0c;基于第8天&#xff0c;预测…

快手根据ID取商品详情 API 返回值说明

item_get-根据ID取商品详情 ks.item_get 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;API接口secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_s…

手机也可以搭建个人博客?安卓Termux+Hexo搭建属于你自己的博客网站【cpolar实现公网访问】

文章目录 前言 1.安装 Hexo2.安装cpolar3.远程访问4.固定公网地址 前言 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并结合…

延时消息队列

目录 前言 一、延时队列实用场景 二、DelayQueue DelayQueue的实现 使用延迟队列 DelayQueue实现延时任务的优缺点 三、RocketMQ 原理 四、Kafka 原理 实现 DelayMessage定义 消息发送代码 消费者代码 参考 前言 延时队列的内部是有序的&#xff0c;最重要的…

Mysql底层数据结构为什么选择B+树

索引底层采用什么数据结构&#xff0c;为什么使用B树而不是其他数据结构&#xff1a; &#xff08;1&#xff09;如果采用二叉树&#xff1a;使用递增字段作为索引时&#xff0c;二叉树会退化成链表&#xff0c;查找效率太低 &#xff08;2&#xff09;如果采用红黑树&#xf…

pytorch-v2.0.1 cuda arm64 aarch64 torch 2.0.1+cu118 源码编译笔记【2】验证cuda安装 成功

接上篇 pytorch-v2.0.1 cuda arm64 aarch64 torch 2.0.1cu118 源码编译笔记_hkNaruto的博客-CSDN博客 由于采用/usr/local/bin/gcc编译&#xff0c;先设置LD_LIBRARY_PATH&#xff0c;再启动python3 export LD_LIBRARY_PATH/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/…

HJ48 从单向链表中删除指定值的节点

Powered by:NEFU AB-IN Link 文章目录 HJ48 从单向链表中删除指定值的节点题意思路代码 HJ48 从单向链表中删除指定值的节点 题意 输入一个单向链表和一个节点的值&#xff0c;从单向链表中删除等于该值的节点&#xff0c;删除后如果链表中无节点则返回空指针。 思路 单向链表…

05-JVM内存分配机制深度剖析

上一篇&#xff1a;04-JVM对象创建深度剖析 1.对象栈上分配 我们通过JVM内存分配可以知道JAVA中的对象都是在堆上进行分配&#xff0c;当对象没有被引用的时候&#xff0c;需要依靠GC进行回收内存&#xff0c;如果对象数量较多的时候&#xff0c;会给GC带来较大压力&#xff…

Linux权限问题

文章目录 前言一、shell 命令1、什么是 shell?2、什么是 shell 脚本&#xff1f;3、shell环境4、总结 二、Linux权限1、su命令2、Linux文件类型3、Linux文件权限4、文件访问权限的相关设置4.1 chmod指令4.2 chown指令4.3 chgrp指令4.4 总结 前言 一、shell 命令 1、什么是 sh…

Maven学习记录

一、Maven是什么 简单来说Maven是一个标准化的java管理和构建工具&#xff0c;它提供了一系列规范&#xff0c;包括项目结构&#xff0c;构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xff0c;发布……&#xff09;&#xff0c;依赖管理等。 标准化就是定下…

探究SpringWeb对于请求的处理过程

探究目的 在路径归一化被提出后&#xff0c;越来越多的未授权漏洞被爆出&#xff0c;而这些未授权多半跟spring自身对路由分发的处理机制有关。今天就来探究一下到底spring处理了什么导致了才导致鉴权被绕过这样严重的问题。 DispatcherServlet介绍 首先在分析spring对请求处…

43、Flink之Hive 读写及详细验证示例

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

React 开发一个移动端项目(1)

技术栈&#xff1a; 项目搭建&#xff1a;React 官方脚手架 create-react-appreact hooks状态管理&#xff1a;redux 、 redux-thunkUI 组件库&#xff1a;antd-mobileajax请求库&#xff1a;axios路由&#xff1a;react-router-dom 以及 historyCSS 预编译器&#xff1a;sass…