首页 > 学院 > 开发设计 > 正文

有关opencv的学习(2)—在图像中加入椒盐噪声

2019-11-06 07:29:44
字体:
来源:转载
供稿:网友

下面的程序为对Lena图加入椒盐噪声的代码:

#include <iostream>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/opencv.hpp>using namespace cv;using namespace std;//加入椒盐噪声void salt(Mat image, int n){    int i,j;    for (int k=0; k<n; k++)    {        // rand()是随机数生成器        i= rand()%image.cols;        j= rand()%image.rows;        if (image.type() == CV_8UC1)        { // 灰度图像            image.at<uchar>(j,i)= 255;        }        else if (image.type() == CV_8UC3)        { // 彩色图像            image.at<cv::Vec3b>(j,i)[0]= 255;            image.at<cv::Vec3b>(j,i)[1]= 255;            image.at<cv::Vec3b>(j,i)[2]= 255;        }    }}int main( ){    Mat image=imread("/Users/zhangxiaoyu/Desktop/lena.jpg");    if(image.empty())  {     cout<<"Error!cannot be read...../n";     return -1;    }    salt(image, 5000);    namedWindow("saltiamge");    imshow("saltimage", image);    waitKey(0);    }

cv::Mat类包含有多种方法,可用来访问图像的各种属性:利用公共成员变量cols和rows可得到图像的列数和行数;利用cv::Mat的

at(int y,int x)方法可以访问元素。

结果显示如下图所示:

注意调用image.at方法时要注意元素类型:

image.at<uchar>(j,i)=255;    (灰度图像)

彩色图像的话,每个像素对应了红,绿,蓝,三个通道,因此包含彩色图像的cv::Mat类会返回一个向量,向量中包含三个8位的数

值。即cv::Vec3b类型,访问彩色图像中元素的方法如下:

image.at<cv::Vec3b>(j,i)[channel]=value;


上一篇:BZOJ 2929 网络流

下一篇:BZOJ 1507 splay

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表