//#include “stdafx.h”
//本节讲述 画线、点、矩形、圆形和椭圆.多边形,文本。 等函数;
#include <opencv2/opencv.hpp>
#include
using namespace std;
using namespace cv;
//Mat bgImage;
//const char *drawdemo_win = “draw shapes and text demo”;
Mat addSaltNoise(const Mat srcImage, int n);
int main(int argc, char**argv)
{
Mat src, dst;
src = imread("C:/Users/Rubison.DELL/Desktop\\杂物/壁纸/小白2.jpg"); //存放自己图像的路径
if (!src.data)
{
printf("could not load image...\r\n");
return -1;
}
char input_title[] = "原图";
char output_title[] = "模糊处理";
namedWindow(input_title,CV_WINDOW_AUTOSIZE);
namedWindow(output_title, CV_WINDOW_AUTOSIZE);
imshow(input_title,src);
//blur(src,dst,Size(3,3),Point(-1,-1),4);
//imshow(output_title,dst);
//Mat dstImage = addSaltNoise(src, 3000); //创建一个椒盐噪音图
//imshow("添加椒盐噪声的图像", dstImage);
存储图像
//imwrite("C:/Users/Rubison.DELL/Desktop\\杂物/壁纸/椒盐噪音图.jpg", dstImage);
//Mat Gaussblur;
//GaussianBlur(src, Gaussblur, Size(3, 3), 11, 11);
//imshow("高斯模糊", Gaussblur);
//Mat medianblur;
//medianBlur(src, medianblur,7); //注意 必须要是大于1的奇数奇数奇数!!!!
//imshow("中值模糊", medianblur);
Mat bilatera; //双边滤波
bilateralFilter(src, bilatera, 15,150, 7); //15-
imshow("双边滤波", bilatera);
Mat psimage;
Mat kernal = (Mat_<int>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);
filter2D(bilatera, psimage, -1, kernal, Point(-1, -1), 0);
imshow("PS的图",psimage);
waitKey(0);
destroyAllWindows();
return 0;
}
Mat addSaltNoise(const Mat srcImage, int n) //椒盐噪音回调函数
{
Mat dstImage = srcImage.clone();
for (int k = 0; k < n; k++)
{
//随机取值行列
int i = rand() % dstImage.rows;
int j = rand() % dstImage.cols;
//图像通道判定
if (dstImage.channels() == 1)
{
dstImage.at(i, j) = 255; //盐噪声
}
else
{
dstImage.at(i, j)[0] = 255;
dstImage.at(i, j)[1] = 255;
dstImage.at(i, j)[2] = 255;
}
}
for (int k = 0; k < n; k++)
{
//随机取值行列
int i = rand() % dstImage.rows;
int j = rand() % dstImage.cols;
//图像通道判定
if (dstImage.channels() == 1)
{
dstImage.at(i, j) = 0; //椒噪声
}
else
{
dstImage.at(i, j)[0] = 0;
dstImage.at(i, j)[1] = 0;
dstImage.at(i, j)[2] = 0;
}
}
return dstImage;
}