如何向彩色图像添加噪声 - Opencv

2023-12-10

我正在尝试向图像添加噪声,然后对其进行降噪以测试我的降噪算法!所以对于基准我指的是这个在线测试样品。我正在尝试复制噪声模型。

参考这个线程1 , 2我正在像这样向图像添加噪点!

Mat mSource_Bgr;
mSource_Bgr= imread(FileName_S,1);

double m_NoiseStdDev=10;

Mat mNoise_Bgr = mSource_Bgr.clone();
Mat mGaussian_noise = Mat(mSource_Bgr.size(),CV_8UC3);

randn(mGaussian_noise,0,m_NoiseStdDev);
mNoise_Bgr += mGaussian_noise;

normalize(mNoise_Bgr,mNoise_Bgr,0, 255, CV_MINMAX, CV_8UC3);

imshow("Output Window",mNoise_Bgr);
//imshow("Gaussian Noise",mGaussian_noise);

My Input Image enter image description here

Output Image with Noise enter image description here

Problem:

添加噪音到图像改变图像的整体亮度这反过来又改变了我的最终结果 PSNR!

I want to get the results as much as closer to this one! enter image description here

到目前为止我已经尝试过什么!

我尝试仅在颜色通道中添加噪点。

  1. 将输入图像转换为 YUV 颜色空间

  2. 仅在 UV 颜色通道中添加噪点并保持 Y 通道不变。

    结果非常糟糕,图像的整体颜色发生了变化!如果需要的话会添加代码!

因此,非常感谢任何有关此的建议!可能会给我一些向图像添加噪点的公式!


谢谢@Andrey Smorodov 的见解! 我成功了!这是我在彩色图像中添加噪声的更新代码。希望这对某人有用!

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

#include <iostream>

using namespace cv;
using namespace std;

inline BYTE Clamp(int n)
{
    n = n>255 ? 255 : n;
    return n<0 ? 0 : n;
}

bool AddGaussianNoise(const Mat mSrc, Mat &mDst,double Mean=0.0, double StdDev=10.0)
{
    if(mSrc.empty())
    {
        cout<<"[Error]! Input Image Empty!";
        return 0;
    }

    Mat mGaussian_noise = Mat(mSrc.size(),CV_16SC3);
    randn(mGaussian_noise,Scalar::all(Mean),Scalar::all(StdDev));

    for (int Rows = 0; Rows < mSrc.rows; Rows++)
    {
        for (int Cols = 0; Cols < mSrc.cols; Cols++)
        {
            Vec3b Source_Pixel= mSrc.at<Vec3b>(Rows,Cols);
            Vec3b &Des_Pixel= mDst.at<Vec3b>(Rows,Cols);
            Vec3s Noise_Pixel= mGaussian_noise.at<Vec3s>(Rows,Cols);

            for (int i = 0; i < 3; i++)
            {
                int Dest_Pixel= Source_Pixel.val[i] + Noise_Pixel.val[i];
                Des_Pixel.val[i]= Clamp(Dest_Pixel);
            }
        }
    }

    return true;
}

bool AddGaussianNoise_Opencv(const Mat mSrc, Mat &mDst,double Mean=0.0, double StdDev=10.0)
{
    if(mSrc.empty())
    {
        cout<<"[Error]! Input Image Empty!";
        return 0;
    }
    Mat mSrc_16SC;
    Mat mGaussian_noise = Mat(mSrc.size(),CV_16SC3);
    randn(mGaussian_noise,Scalar::all(Mean), Scalar::all(StdDev));

    mSrc.convertTo(mSrc_16SC,CV_16SC3);
    addWeighted(mSrc_16SC, 1.0, mGaussian_noise, 1.0, 0.0, mSrc_16SC);
    mSrc_16SC.convertTo(mDst,mSrc.type());

    return true;
}


int main(int argc, const char* argv[])
{
    Mat mSource= imread("input.png",1); 
    imshow("Source Image",mSource);

    Mat mColorNoise(mSource.size(),mSource.type());

    AddGaussianNoise(mSource,mColorNoise,0,10.0);

    imshow("Source + Color Noise",mColorNoise); 


    AddGaussianNoise_Opencv(mSource,mColorNoise,0,10.0);//I recommend to use this way!

    imshow("Source + Color Noise OpenCV",mColorNoise);  

    waitKey();
    return 0;
}  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何向彩色图像添加噪声 - Opencv 的相关文章

  • Opencv - 找不到头文件

    我正在尝试使用 opencv 开始开发 问题是 到目前为止我几乎无法设置 opencv 因为我找不到它的头文件 我对此主题进行了一些研究 但没有一个真正有帮助 下面是一些链接 opencv2 包含文件在哪里 https stackoverf
  • 在 Android 中使用 OpenCV 查找图像匹配

    我正在尝试构建一个 Android 应用程序 该应用程序可以比较设备相机拍摄的照片 以在一组图像中找到匹配项 我已经在 Android Studio 上配置了 OpenCV 但仅此而已 有人可以通过链接到资源或建议教程来提供帮助吗 Open
  • OpenCV:如何使用图像计算相机和物体之间的距离?

    我是 OpenCV 的新手 我正在使用以下公式来计算距离 distance to object mm focal length mm real height of the object mm image height pixels obje
  • Haar训练时正样本和负样本使用多少张图片?

    我已经阅读了大量有关 Haar 训练的内容 但我不清楚应该为正样本集和负样本集使用多少图像 我看到建议使用很多图像 有些人推荐数千张 我也不清楚正负样本图像的数量是否应该相同 这是关于 Haar 训练的最佳教程 你试过这个吗 http no
  • OpenCV 机器学习算法的 CSV 格式

    OpenCV 中的机器学习算法似乎使用以 CSV 格式读取的数据 参见示例这个 cpp文件 https code ros org trac opencv browser trunk opencv samples c tree engine
  • 需要FTP文件而不存储解释器文件通过Python保存在本地

    我正在尝试做一些图像解释器并尝试将它们直接存储到 FTP 服务器 但我的步骤是从本地文件夹上传图像 然后将其转换为蒙版图像 然后它将获得最终输出 但是在我的蒙版和最终输出场景中 临时图像被保存在本地 这是我不想要的 但如果不将图像存储在本地
  • 警告:发生了非法反射访问操作(java 中的便携式 opencv)

    我想做一个便携的opencv将依赖项添加到 maven 文件的应用程序pom xml 简化的代码是 import org opencv core Mat public class Builder public static void mai
  • OpenCV 旋转图像而不裁剪澄清

    我想扩展这个主题 参考用户 Lars Schillingmann 给出的这个 SO 问题和接受的答案 在 C 中的 OpenCV 中旋转图像而不裁剪 https stackoverflow com questions 22041699 ro
  • 如何在 OpenCV 中将 Float Mat 写入文件

    我有一个矩阵 Mat B 480 640 CV 32FC1 包含浮点值 我想将此矩阵写入一个可以打开的文件Notepad https en wikipedia org wiki Windows Notepad or 微软Word https
  • VideoCapture 未检测到 uEye 摄像头

    我的 uEye 相机遇到了一个问题 使用我的笔记本电脑摄像头 id 0 或 USB 上的网络摄像头 id 1 此行完美运行 TheVideoCapturer open 1 TheVideoCapturer 属于 VideoCapture 类
  • 如何将k4a_image_t转换为opencv矩阵? (Azure Kinect 传感器 SDK)

    我开始尝试使用 Azure Kinect Sensor SDK 我经历了官方操作指南 https learn microsoft com en us azure Kinect dk about sensor sdk sensor sdk 我
  • 使用 OpenCV 和 Python 叠加两个图像而不丢失颜色强度

    如何叠加两个图像而不损失两个图像的颜色强度 我有图像1和图像2 2 我尝试使用 0 5 alpha 和 beta 但它给我的合并图像的颜色强度只有一半 dst cv2 addWeighted img1 0 5 img2 0 5 0 但是当我
  • PyTorch 中的数据增强

    我对 PyTorch 中执行的数据增强有点困惑 现在 据我所知 当我们执行数据增强时 我们保留原始数据集 然后添加它的其他版本 翻转 裁剪 等 但 PyTorch 中似乎并没有发生这种情况 据我从参考文献中了解到 当我们使用data tra
  • 自动跟踪算法

    我正在尝试写一个simple跟踪例程来跟踪电影中的某些点 本质上我有一系列 100 帧长的电影 在黑暗背景上显示一些亮点 我每帧有大约 100 150 个点 它们在电影的过程中移动 我想跟踪它们 所以我正在寻找一些有效的 但可能不会过度实施
  • Android API人脸检测与OpenCV/JavaCV人脸检测

    我在 Android 设备上使用了本地 Android 人脸检测 但它似乎很慢 而且我不太确定其可靠性 我还使用了 OpenCV 的人脸检测 但仅限于 PC 而不是 Android 设备 对于 Android 我猜我必须使用 JavaCV
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • MATLAB 中的霍夫变换

    有谁知道如何使用霍夫变换来检测二值图像中最强的线 A zeros 7 7 A 6 10 18 24 36 38 41 1 使用 rho theta 格式 其中 theta 以 45 为步长 从 45 到 90 以及如何在 MATLAB 中显
  • OpenCV:将垫子除以标量的最简单方法是什么

    我认为标题中已经包含了很多内容 显然我可以迭代和划分 但我认为有一种内置的方法 我看见cvConvertScale但这不适用于类型cv Mat 我知道标量乘法的缩放运算 cv Mat M float alpha cv Mat Result
  • 计数物体和更好的填充孔的方法

    我是 OpenCV 新手 正在尝试计算物体的数量在图像中 我在使用 MATLAB 图像处理工具箱之前已经完成了此操作 并在 OpenCV Android 中也采用了相同的方法 第一步是将图像转换为灰度 然后对其进行阈值计算 然后计算斑点的数
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码

随机推荐

  • 按下返回键时如何提交表单?

    当按下返回键并且表单中没有按钮时 如何提交 HTML 表单 提交按钮不存在 我正在使用自定义 div 而不是它 要在按下 Enter 键时提交表单 请沿着这些线路创建一个 javascript 函数 function checkSubmit
  • jenkins 无法运行 Firefox:未指定协议错误:无法打开显示::0

    我已经在 linux mint 上安装了 jenkins 作为服务 我正在尝试运行用 python 编写的测试 但脚本无法运行 Firefox 这条线有问题 self browser webdriver Firefox 当我以 jenkin
  • 无法使用 InteractiveBrowserCredential 连接到 azure blob 存储

    这段代码运行得很好 from azure storage blob import BlobServiceClient from azure identity import InteractiveBrowserCredential Devic
  • android 与房间的左连接查询

    我正在尝试使用房间库更改我的 sqlite 数据库 我对左连接查询有点困惑 我已经用 sqlite 实现了它 但不知道如何实现相同的房间 这是我的表创建 第一个表 通知 db execSQL CREATE TABLE IF NOT EXIS
  • 使用多个“for”循环解码嵌套 JSON

    我是 Python 新手 上周 并且已经达到了我的极限 在这个问题上花了三天时间 大部分时间都在 stackoverflow 但我不知道如何继续下去 The Json有多个嵌套数组 它可以包含三个 如下面的示例 json txt 所示 或
  • 使用 pyinstaller 创建 Django exe 时静态文件的位置

    我有一个具有以下结构的 Django 项目 根 视频 静止的 模板 settings py 中的 STATIC URL 设置为 STATIC URL static 我设法使用 pyinstaller 从 manage py 创建一个 Win
  • HTML5 验证错误:在此上下文中不允许元素源作为音频的子元素

    这是我作业中的一段代码 我检查了 w3 样本http www w3schools com html html5 audio asp并且格式正确 我是因为这些错误而发疯还是我错过了什么 我相信这就是 HTML5source元素不喜欢类型的编写
  • tsconfig.json 中的 target 是做什么用的?

    什么是target in tsconfig json表示 compilerOptions sourceMap true target es5 module commonjs jsx react moduleResolution classi
  • Google 应用程序脚本中的 Adword 脚本

    我无法在 Google App 脚本中找到 Adword API 支持 我可以从 adword 帐户编写 adword 脚本 但目前我正在处理多个帐户 几乎 25 个 我要做的就是进入个人帐户并在其中复制我的脚本帐户和adword脚本有一个
  • 在pykml中读取带有多个地标的kml文件

    In pykml 我可以使用以下代码读取文件中的第一个地标 with open filename as f pm parser parse f getroot Document Folder print got print pm Place
  • 使用 Storyboard 和 Xcode 4.5 的 UIPageViewController

    我想问一些关于 Xcode 4 5 的问题 我正在使用故事板创建应用程序 这个应用程序有UIPageViewController 但是如果我想定义标识符UIViewController在情节提要的 IB 中 已经没有地方了 你能告诉我 我可
  • 如何进行跨站ajax请求?

    浏览器不允许跨站点 AJAX 调用 这是安全限制 有什么可能的解决办法吗 EDIT 我只控制来电者网站 如果你控制双方 那么就有很多选择 例如JSONP or 修改标题远程网站的响应 很遗憾 JSONP 仅在远程网站支持时才有效 你can
  • Opencv:在盒子中找到盒子

    后勤 opencv 2 4 和 Python 2 7 The image I m working with 问题 我感兴趣的是隔离围绕 9 条垂直线和水平线形成盒子的轮廓 我只是不确定该怎么做 我看过各种教程 例如关于数独谜题的教程 这些教
  • 通过引用临时传递函数的生命周期[重复]

    这个问题在这里已经有答案了 我可以做这样的事情 const int i 5 并将临时的生命周期延长到i 但怎么样 const int fun const int i return i int main const int r fun 5 C
  • matplotlib - 更改图大小但保持字体大小不变

    我想显示几个不同大小的图形 确保打印图形时文本始终具有相同的大小 我怎样才能做到这一点 举个例子 假设我有两个数字 import matplotlib pylab as plt import matplotlib as mpl mpl rc
  • Angular 9 通用错误:组件“HeaderComponent”未解析:

    更新到 Angular 9 和 Universal 9 后 运行时出现错误npm run build ssr npm run serve ssr Error Component HeaderComponent is not resolved
  • 疯狂邮件方法不起作用?

    在配置菜单下的 spree 管理面板中 我配置了邮件 smtp 端口等 创建新邮件方法后 我按下测试邮件按钮 我收到以下警报消息 测试邮件发送成功 甚至终端窗口也显示电子邮件发送成功消息 但是邮件未送达相应地址 发送测试邮件后控制台日志 S
  • 将装置转换为 Rails 中的 Factory Girl

    我想将我的装置迁移到 Rails 中的 Factory Girl 有没有简单的方法可以转换factories rb 文件中的所有yml 文件 我假设您想要做的是找到一个脚本来查看您的模型并为它们生成工厂 我尝试过一次 使用除了factory
  • 如何选择最大连接池大小?

  • 如何向彩色图像添加噪声 - Opencv

    我正在尝试向图像添加噪声 然后对其进行降噪以测试我的降噪算法 所以对于基准我指的是这个在线测试样品 我正在尝试复制噪声模型 参考这个线程1 2我正在像这样向图像添加噪点 Mat mSource Bgr mSource Bgr imread