OpenCV 图像存取之椒盐噪点

所谓的椒盐早点便是指随机的将部分像素设置为白色或者黑色。在传输过程中,如何图像的部分像素丢失,该噪点便会出现。

#include <iostream>
#include <string>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
using namespace cv;

// 读入图片
Mat readImage(String imgName);
// 显示图片
void showImage(String windowName, Mat ima);
// 椒盐函数
void salt(cv::Mat &image, int n);
// 保存图片
void saveImage(String imageName, Mat ima);

void main() {
    String imgName = "381066140_1536_864.jpg";
    // 打开图像
    Mat img = readImage(imgName);
    // 设置椒盐增加噪点
    salt(img, 40000); 
    showImage("Salt", img);
    // 保存图片
    saveImage("salt.jpg", img);
}

// 椒盐函数,设置为白色噪点
void salt(cv::Mat &image, int n) {
    for (int k = 0; k < n; k++) {
        // 生成行列的随机数
        int iCol = rand() % image.cols;
        int jRow = rand() % image.rows;
        // 判断是否是灰度图
        if (1 == image.channels()) {
            image.at<uchar>(jRow, iCol) = 255;
        }
        // 判断是否是彩色图像
        else if (3 == image.channels()) {
            image.at<cv::Vec3b>(jRow, iCol)[0] = 255;
            image.at<cv::Vec3b>(jRow, iCol)[1] = 255;
            image.at<cv::Vec3b>(jRow, iCol)[2] = 255;
        }
    }
}

// 显示图片
void showImage(String windowName ,Mat ima) {
    imshow(windowName, ima);
    waitKey(0);
}

// 读入图片
Mat readImage(String imgName) {
    Mat ima = imread(imgName);
    cvNamedWindow("Charater2");
    imshow("C2", ima);
    waitKey(0);
    return ima;
}

// 保存图片
void saveImage(String imageName, Mat ima) {
    imwrite(imageName, ima);
}

运行结果如下
原图

这里写图片描述

加入椒盐噪点后的图像
- 这里写图片描述
-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值