高斯滤波

To smooth the image, a Gaussian filter kernel is convolved with the image.

高斯滤波的实质就是用高斯核对图片进行卷积操作

算法较为简单,在复杂度运行效率方面还有很多需要改进的

从RGB色转为灰度色算法(转) - carekee - 博客园 (cnblogs.com)

彩图转灰度图


Mat gray(Mat& image) {Mat dst = Mat::zeros(image.size(), CV_8UC1);for (int i = 0; i < image.rows; i++) {for (int j = 0; j < image.cols; j++){dst.at<uchar>(i, j) = 0.114*image.at<Vec3b>(i, j)[0] + 0.587*image.at<Vec3b>(i, j)[1] + 0.299*image.at<Vec3b>(i, j)[2];//将彩色图像的三个通道的值,每个乘以对应的比例,进行相加,opencv B G R}}return dst;
}

填充 padding

padding 的选择,5乘5(padding = 2),3乘3(padding = 1)

如上图,要是右上角的小正方形位于卷积核的中心正方形处,就需要填充一层空的矩形

因此可以推至5乘5的卷积核

我选用的是3*3 的卷积,故填充为1

Mat Padding(Mat& image,int padNum = 1) {Mat dst = Mat::zeros(image.size[0]+2*padNum, image.size[1] + 2*padNum, CV_8UC1);cout << "dst size" << dst.size << endl;for (int i = 0; i < image.rows; i++) {for (int j = 0; j < image.cols; j++){dst.at<uchar>(i + 1, j + 1) = image.at<uchar>(i, j);}}return  dst;}

卷积

同样 3*3 的卷积核在主函数里

Mat  convolution(Mat &image, Mat &kernal) {Mat dst = Mat ::zeros(image.size(),image.type());// padding 填充Mat test = Padding(image);// 6*6 填充一层 变 8*8//cout << "conv test" << endl;for (int i = 0; i < image.rows; i++) {for (int j = 0; j < image.cols; j++){double pixSum = 0;//这个像素就在卷积核的中心处for (int k = 0; k < kernal.rows; k++) {for (int l = 0; l < kernal.cols; l++) {//cout << kernal.at<double>(k, l) << endl;//cout << double(test.at<uchar>(k + i, l + j)) << endl;pixSum += kernal.at<double>(k, l) * double(test.at<uchar>(k + i, l + j));}}dst.at<uchar>(i, j) = uchar(pixSum);}}return dst;}

因为使用的是3X3 的卷积核,所以模糊的不明显

代码

#include<opencv2/opencv.hpp>
#include<iostream>using namespace cv;
using namespace std;Mat gray(Mat& image) {Mat dst = Mat::zeros(image.size(), CV_8UC1);for (int i = 0; i < image.rows; i++) {for (int j = 0; j < image.cols; j++){dst.at<uchar>(i, j) = 0.114*image.at<Vec3b>(i, j)[0] + 0.587*image.at<Vec3b>(i, j)[1] + 0.299*image.at<Vec3b>(i, j)[2];//将彩色图像的三个通道的值,每个乘以对应的比例,进行相加,opencv B G R}}return dst;
}Mat Padding(Mat& image,int padNum = 1) {Mat dst = Mat::zeros(image.size[0]+2*padNum, image.size[1] + 2*padNum, CV_8UC1);cout << "dst size" << dst.size << endl;for (int i = 0; i < image.rows; i++) {for (int j = 0; j < image.cols; j++){dst.at<uchar>(i + 1, j + 1) = image.at<uchar>(i, j);}}return  dst;}Mat  convolution(Mat &image, Mat &kernal) {Mat dst = Mat ::zeros(image.size(),image.type());// padding 填充Mat test = Padding(image);// 6*6 填充一层 变 8*8//cout << "conv test" << endl;for (int i = 0; i < image.rows; i++) {for (int j = 0; j < image.cols; j++){double pixSum = 0;//这个像素就在卷积核的中心处for (int k = 0; k < kernal.rows; k++) {for (int l = 0; l < kernal.cols; l++) {//cout << kernal.at<double>(k, l) << endl;//cout << double(test.at<uchar>(k + i, l + j)) << endl;pixSum += kernal.at<double>(k, l) * double(test.at<uchar>(k + i, l + j));}}dst.at<uchar>(i, j) = uchar(pixSum);}}return dst;}/*
Mat GaussianBlur(Mat& image){//实质就是用高斯核实现一个卷积操作}
*/int main(int argc, char* argv[])
{//load picsstring imgPath = "E:\\研究生\\数字图像处理\\c++\\字符识别\\Project1\\beauty.jpg";Mat srcImg = imread(imgPath);//RGB,JPG,PNG,TIFF格式if (srcImg.empty()) {cout << "can't load pic" << endl;exit(-1);}//show pics//imshow("air plane",srcImg);//转灰度化Mat image_gray = gray(srcImg);imshow("gray img", image_gray);//3*3 的卷积核 , padding = 1Mat kernal = (Mat_<double>(3, 3) << 1, 2, 1,2, 4, 2,1,2, 1);kernal = kernal / 16;//卷积实现高斯滤波Mat imgconv = convolution(image_gray, kernal);imshow("img conv", imgconv);waitKey(0);//wait functionreturn 0;
}

与opencv对比

模糊效果好像差不多

int main(int argc, char* argv[])
{//load picsstring imgPath = "E:\\研究生\\数字图像处理\\c++\\字符识别\\Project1\\beauty.jpg";Mat srcImg = imread(imgPath,0);//RGB,JPG,PNG,TIFF格式if (srcImg.empty()) {cout << "can't load pic" << endl;exit(-1);}//show picsimshow("src",srcImg);Mat  dst;GaussianBlur(srcImg,dst,Size(3,3),0,0);imshow("opencv gsblur", dst);waitKey(0);//wait functionreturn 0;
}

高斯滤波 c++实现相关推荐

  1. 《OpenCV3编程入门》学习笔记6 图像处理(一)线性滤波:方框滤波、均值滤波、高斯滤波

    第6章 图像处理 6.1 线性滤波:方框滤波.均值滤波.高斯滤波 6.1.1 图像滤波与滤波器 1.图像滤波:在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制 目的: (1)抽出对象的特征作为图 ...

  2. Python 图像处理 | 图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波

    作者 | 杨秀璋,责编 | 夕颜 题图  | 视觉中国 出品 | CSDN博客 本篇文章主要讲解Python调用OpenCV实现图像平滑,包括四个算法:均值滤波.方框滤波.高斯滤波和中值滤波.全文均是 ...

  3. 【OpenCV 4开发详解】高斯滤波

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  4. python 双边滤波与高斯滤波

    双边滤波速度不是特别快 python 双边滤波与高斯滤波 高斯滤波就是对整幅图像进行加权平均的过程.每个像素点的值,都由其本身和邻域内的其它像素值经过加权平均后得到.高斯滤波的详细操作是:用一个模板( ...

  5. 图像平滑处理(归一化块滤波、高斯滤波、中值滤波、双边滤波)

    图像平滑处理 目标 本教程教您怎样使用各种线性滤波器对图像进行平滑处理,相关OpenCV函数如下: blur GaussianBlur medianBlur bilateralFilter 原理 No ...

  6. OpenCV 高斯滤波

    高斯噪声:噪声的概率密度分布是正态分布 高斯噪声用途:去除高斯噪声 如果原图是彩色图片,可以对RGB三个通道分别做高斯平滑. cv2.GaussianBlur(src,ksize,sigmaX,sig ...

  7. 【图像处理】【计算机视觉】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波...

    首先注意点:关于OpenCV中的函数,有老的数据结构,还有新的opencv2的数据结构,一般地区别就是IplImage*与Mat的区别,两者大致分别对应着C和C++内的两个功能一样,但是函数名称有别. ...

  8. python数据处理高斯滤波_十大点云数据处理技术梳理

    研究点云数据时,感觉无从下手? 看看这十大点云数据处理技术,换个思路学点云. 点云 · 定义 简言之,在获取物体表面每个采样点的空间坐标后,得到的是一个点的集合,称之为"点云".包 ...

  9. python彩色图像如何进行高斯滤波ValueError: correlate2d inputs must both be 2-D arrays解决方法

    文章目录 遇到的问题 解决方法 参考 遇到的问题 在执行高斯滤波的代码时,遇到下列问题 ValueError: correlate2d inputs must both be 2-D arrays 进 ...

  10. 灰度图像--图像增强 平滑之均值滤波、高斯滤波

     灰度图像--图像增强 平滑之均值滤波.高斯滤波         目录(?)[+] 开篇废话 均值滤波 数学 效果 代码 高斯滤波 数学 效果 代码 总结 学习DIP第30天 转载请标明本文出处: ...

最新文章

  1. 自建邮件服务器给企业带来的商业价值
  2. 谈javascript变量声明
  3. vmbox下linux共享文件
  4. Java中的锁原理、锁优化、CAS、AQS详解!
  5. Spring Boot定时任务-Quartz介绍
  6. discuz mysql data_Discuz!显示 Database Error的原因和解决方法
  7. [vue] vue组件会在什么时候下被销毁?
  8. 油田生产中的几个“三”
  9. 计算机学科评估b是水平,学科评估B什么水平?
  10. lldp协议代码阅读_microsoft,lldp协议
  11. Java解决vue跨域问题
  12. OJ《程序设计基础I 》实验5-一维数组
  13. 插件目标[置顶] Maven自定义绑定
  14. 全世android手机,全世界最安全手机:黑莓第二款Android手机DTEK 50
  15. 2022下半年软考-中级-软件设计师-过关经验
  16. Run Run Run
  17. ARM 指令集 和 Thumb 指令集
  18. 想系统的学习运维有什么需要注意的?
  19. 安装miniconda出现丢失api-mis-win-core-path-l1-1-0.dll的解决方案
  20. 开源与标准协同发展研究报告(2022)

热门文章

  1. asp与ACCESS数据库的连接及基本操作
  2. Scrapy框架:Request和Response对象,使用Request发送get请求、FormRequest发送post请求
  3. windows使用放大镜快速放大屏幕局部
  4. python colour-science 绘制CIE 1976色度图
  5. 给移动硬盘装上LINUX全攻略
  6. 使用Microsoft Network Monitor分析Wireshark无法解析的SSL流量包
  7. AIGC:自动化内容生成,AI 的下一个引爆点?
  8. 音频效果器的介绍与实践
  9. 最新 CCF A 类人工智能会议论文下载汇总 (含2022)
  10. 淘宝双11促销背后高并发处理之淘宝网采用什么技术架构来实现网站高负载