//高斯滤波器 https://github.com/scutlzk
#include <opencv2\highgui\highgui.hpp>
#include <iostream>
#include <vector> using namespace cv;
using namespace std; void Get_Gaussian_Kernel(double*& gaus_1, const int size, const double sigma_s)
{
gaus_1 = new double[size*size];
double **gaus = new double*[size];
for (int i = 0; i<size; i++)gaus[i] = new double[size]; double sum = 0;
for (int i = -size / 2; i<size / 2 + 1; i++) {
for (int j = -size / 2; j<size / 2 + 1; j++) {
gaus[i + size / 2][j + size / 2] = exp(-((i*i) + (j*j)) / (2 * sigma_s*sigma_s));
sum += gaus[i + size / 2][j + size / 2];
}
} for (int i = 0; i<size; i++) {
for (int j = 0; j<size; j++) {
gaus[i][j] /= sum;
gaus_1[i*size + j] = gaus[i][j]; //使用一维更简单
}
} return;
} void Gaussian_Filter(const char *filename, Mat *&dst,const int size,const double sigma_s)
{
double* templates;
Get_Gaussian_Kernel(templates, size, sigma_s);
Mat src = imread(filename, 3);
dst = new Mat(src.rows, src.cols, CV_8UC3);
namedWindow("src");
imshow("src", src);
for (int j = 0; j<src.rows; j++)
{
for (int i = 0; i<src.cols; i++)
{
double sum0 = 0;
double sum1 = 0;
double sum2 = 0;
int index = 0;
for (int m = j - size/2; m<j + size/2+1; m++)
{
for (int n = i - size / 2; n<i + size / 2 + 1; n++)
{ if (m<0 || n<0 || m>src.rows - 1 || n>src.cols - 1) { index++; continue; }//边缘不处理
sum0 += src.at<Vec3b>(m, n)[0] * templates[index++];
sum1 += src.at<Vec3b>(m, n)[1] * templates[index-1];
sum2 += src.at<Vec3b>(m, n)[2] * templates[index-1]; }
}
sum0 > 255 ? 255 : sum0;
sum1 > 255 ? 255 : sum1;
sum2 > 255 ? 255 : sum2; (*dst).at<Vec3b>(j, i)[0] = sum0;
(*dst).at<Vec3b>(j, i)[1] = sum1;
(*dst).at<Vec3b>(j, i)[2] = sum2;
}
} namedWindow("dst");
imshow("dst", *dst);
waitKey(0);
return;
} int main() {
const char *filename = "123.jpg";
const int Gaussian_Kernel_Size = 9;
const double sigma_s = 3; Mat *dst;
Gaussian_Filter(filename, dst, Gaussian_Kernel_Size, sigma_s);
imwrite("1234.jpg", *dst);
return 0; }

  

vs2015+opencv3.3.1 实现 c++ 彩色高斯滤波器(Gaussian Smoothing, Gaussian Blur, Gaussian Filter)的更多相关文章

  1. vs2015+opencv3.3.1 实现 c++ 灰度高斯滤波器

    #include <opencv2\highgui\highgui.hpp> #include <iostream> #include<vector> using ...

  2. win7下VS2015+opencv3.1.0配置

    由于opencv与vs的适配版本不同,本人在官网下载opencv3.1.0,其可以和VS2013.VS2015适配,文中以VS2015为例 opencv2.4.13-----vc11;vc12 ope ...

  3. [转]VS2015+OpenCV3.3 GPU模块和opencv_contrib模块的编译以及采用CMake编译opencv_contrib时提示“No extra modules found in folder”问题的解决方案

    据官方说法,目前还不是太稳定的算法模块都在opencv_contrib里边,由于不稳定,所以不能在release版本里发行,只有在稳定以后才会放进release里边.但是这里边有很多我们经常要用的算法 ...

  4. Win10 64位+VS2015+Opencv3.3.0安装配置

    Win10 64位+VS2015+Opencv3.3.0安装配置 1.我们首先下载VS2015.OpenCV3.3.0. 1.1 VS2015下载 在官网https://visualstudio.mi ...

  5. win10+VS2015+opencv3.4.0配置方法

    win10+VS2015+opencv3.4.0配置方法 操作环境: windows10 64位opencv 3.4.0:https://opencv.org/releases.html(选择open ...

  6. 高斯拉普拉斯算子(Laplace of Gaussian)

    高斯拉普拉斯(Laplace of Gaussian) kezunhai@gmail.com http://blog.csdn.net/kezunhai Laplace算子作为一种优秀的边缘检测算子, ...

  7. C++实现高斯滤波器

    在matlab中,我们经常用到高斯滤波器,生成滤波器一般都是这样的函数psf =   fspecial('gauss', GaussSize, sigma),但是在vs2010中用到的高斯滤波器不能自 ...

  8. 二维高斯滤波器(gauss filter)的实现

    我们以一个二维矩阵表示二元高斯滤波器,显然此二维矩阵的具体形式仅于其形状(shape)有关: def gauss_filter(kernel_shape): 为实现二维高斯滤波器,需要首先定义二元高斯 ...

  9. win10+vs2015+opencv3.0 x86/x64配置(debug+release)

    最近做一些图像识别的项目,用到了opencv,opencv3.1没有x86版本,所以只能用opencv3.0来完成,下面介绍一下在window10下vs2015 配置opencv3.0的过程(x86和 ...

随机推荐

  1. 参数传递中编码问题(Get/Post 方式)(三)

    自己总结的:     GET方式:      1.提交方式为GET时,数据是放在请求HEADER头中的,且将数据与URL拼接后,浏览器会对拼接后的url进行编码,编码方式为浏览器默认的编码,      ...

  2. Java和C#中的自定义元数据

    Java的annotation和C#的Attribute,可用来为语言增加语义,定义元数据. 转自:http://rednaxelafx.iteye.com/blog/464889 http://bl ...

  3. Python re模块与正则表达式的运用

    re模块 永远不要起一个py文件的名字,这个名字和你已知的模块同名 查找 findall():     匹配所有   每一项都是列表中的一个元素 语法 :   findall(正则判断条件,要判断字符 ...

  4. sklearn 中 make_blobs模块

    # 生成用于聚类的各向同性高斯blobsklearn.datasets.make_blobs(n_samples = 100,n_features = 2,center = 3,cluster_std ...

  5. 在ubuntu中编译内核是用make&nbsp;…

    执行过程如下: root@zyx-VirtualBox:~# cd /opt/EmbedSky/ root@zyx-VirtualBox:/opt/EmbedSky# cd linux-2.6.30. ...

  6. 基于C++11的线程池(threadpool),简洁且可以带任意多的参数

    咳咳.C++11 加入了线程库,从此告别了标准库不支持并发的历史.然而 c++ 对于多线程的支持还是比较低级,稍微高级一点的用法都需要自己去实现,譬如线程池.信号量等.线程池(thread pool) ...

  7. 算法技巧讲解》关于对于递推形DP的前缀和优化

    这是在2016在长沙集训的第三天,一位学长讲解了“前缀和优化”这一技巧,并且他这一方法用的很6,个人觉得很有学习的必要. 这一技巧能使线性递推形DP的速度有着飞跃性的提升,从O(N2)优化到O(N)也 ...

  8. Navicat 连接阿里云的 MySQL

    1 利用Navicat连接阿里云服务器中MySQL 常规连接方式常用于连接本机数据库以及虚拟机中的数据库:但是连接阿里云的MySQL数据库时会出现连接不上的情况,错误信息如下: 1.1 常规中的配置 ...

  9. 728. Self Dividing Numbers可以自己除以自己的数字

    [抄题]: A self-dividing number is a number that is divisible by every digit it contains. For example, ...

  10. 一次shell中seq的处理

    一次shell中seq的处理 背景:用要shell 提取 文件中内容,文件名是用序列号如下生成,文件差不多有将近400多w个  如下:  www.ahlinux.com 原始脚本#! /bin/sh# ...