opencv学习日记——图像均值滤波
1、图像处理结果
总体看效果一般(哈哈哈哈)
2、代码实现部分
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
void saltandpepper(Mat image, int n)
{
for (int k = 0; k < n / 2; k++)
{
//随机取点
int i, j;
i = rand() % image.cols;
j = rand() % image.rows;
//奇数黑点, 偶数白点
int white_black = rand() % 2;
if (white_black == 0)
{
//单通道
if (image.type() == CV_8UC1)
image.at<uchar>(j, i) = 255;
//多通道
if (image.type() == CV_8UC3)
image.at<Vec3b>(j, i)[0] = 255;
image.at<Vec3b>(j, i)[1] = 255;
image.at<Vec3b>(j, i)[2] = 255;
}
if (white_black)
{
if (image.type() == CV_8UC1)
image.at<uchar>(j, i) = 0;
if (image.type() == CV_8UC3)
image.at<Vec3b>(j, i)[0] = 0;
image.at<Vec3b>(j, i)[1] = 0;
image.at<Vec3b>(j, i)[2] = 0;
}
}
}
int main()
{
//读取图片
Mat img = imread("nazha1.jpg");
//读取灰度图
Mat gray = imread("nazha1.jpg", IMREAD_ANYDEPTH);
if (img.empty() || gray.empty())
{
cout << "输入为空";
return -1;
}
//生成与图片尺寸类型相同的矩阵
Mat img_noise = Mat::zeros(img.rows, img.cols, img.type());
Mat gray_noise = Mat::zeros(gray.rows, gray.cols, gray.type());
imshow("原图img", img);
imshow("原图gray", gray);
saltandpepper(img, 10000);
saltandpepper(gray, 10000);
imshow("椒盐img", img);
imshow("椒盐gray", gray);
Mat img3, gray3;
//去噪
//blur(原图, 新图, 去噪滑窗)
blur(img, img3, Size(3, 3));
blur(gray, gray3, Size(3, 3));
imshow("去噪img", img);
imshow("去噪gray", gray);
//读取图片
Mat img2 = imread("nazha1.jpg");
//读取灰度图
Mat gray2 = imread("nazha1.jpg", IMREAD_ANYDEPTH);
//给空矩阵进行赋值
RNG rng;
//rng.fill(空矩阵, 高斯噪声,均值, 方差 )
rng.fill(img_noise, RNG::NORMAL, 10, 20);
rng.fill(gray_noise, RNG::NORMAL, 15, 30);
// imshow("img噪声", img_noise);
// imshow("gray噪声", gray_noise);
//给图片添加噪声
img2 = img2 + img_noise;
gray2 = gray2 + gray_noise;
imshow("img加噪声", img2);
imshow("gray加噪声", gray2);
Mat img4, gray4;
blur(img2, img4, Size(3, 3));
blur(gray2, gray4, Size(3, 3));
imshow("高斯去噪img", img4);
imshow("高斯去噪gray", gray4);
waitKey(0);
return 0;
}