vs2015+opencv3.3.1 实现 c++ 双边滤波器(Bilateral Filter)
#include <opencv2\highgui\highgui.hpp>
#include <iostream>
#include<vector>
using namespace cv;
using namespace std; void GetGaussianKernel(double*& gaus_1, const int size, const double sigma_s);
void gaussianFilter2(const vector<uchar>& corrupted, vector<uchar> &smooth, double*& templates,const int width,const int height, const double sigma_r, const int size_m); int main() { const double sigma_r = 30; //值域的sigma
const double PI = 4.0*atan(1.0); //圆周率π赋值
const int size_m = 5; //模板大小
const double sigma_s = 10; //空间域的sigma
double *templates; templates = new double[size_m*size_m];
GetGaussianKernel(templates, size_m, sigma_s);
Mat img = imread("123.jpg", 3); // namedWindow("MyWindow");
// imshow("MyWindow", img); vector<uchar> array(img.rows*img.cols*3);
if (img.isContinuous()) { array.assign(img.datastart, img.dataend); } vector<uchar> no(img.rows*img.cols*3); gaussianFilter2(array, no, templates ,int(img.cols)*3, img.rows,sigma_r,size_m); Mat now((int)img.rows, (int)img.cols, CV_8UC3 ); for (int i = 0; i < img.rows; i++)
for (int j = 0; j < img.cols; j++) {
now.at<Vec3b>(i, j)[0] = no[i*img.cols*3 + j*3];
now.at<Vec3b>(i, j)[1] = no[i*img.cols*3 + j*3 + 1];
now.at<Vec3b>(i, j)[2] =no[i*img.cols*3 + j*3 + 2];
} imwrite("1123.jpg", now);
namedWindow("MyWindow1");
imshow("MyWindow1", now);
waitKey(0);
return 0;
} void GetGaussianKernel(double*& gaus_1, const int size, const double sigma_s)
{
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 gaussianFilter2(const vector<uchar>& corrupted, vector<uchar> &smooth,double*& templates,const int width,const int height,const double sigma_r, const int size_m) {
int len = size_m / 2;
smooth = corrupted; //复制像素 for (int j = 0; j<height ; j++) { //边缘不处理
for (int i = 0; i<width ; i++) {
double sum = 0;
int index = 0;
double sum_c = 0;
double temp = 0;
for (int m = j - len; m<j + len + 1; m++) {
for (int n = i - 3 * len; n<i + 3 * len + 1; n += 3) {
if (m<0 || n<0 || m>height - 1 || n>width - 1)continue; //边缘处理
temp = templates[index++] * exp(-(corrupted[m*width + n] - corrupted[j*width + i])*(corrupted[m*width + n] - corrupted[j*width + i]) / (2.0*sigma_r*sigma_r));
sum += corrupted[m*width + n] * temp;
sum_c += temp;
}
}
sum /= sum_c;
if (sum > 255)
sum = 255;
if (sum < 0)
sum = 0;
smooth[j*width + i] = sum;
}
}
}
vs2015+opencv3.3.1 实现 c++ 双边滤波器(Bilateral Filter)的更多相关文章
- 【VS开发】【图像处理】双边滤波器bilateral filter
目录(?)[-] 简介 原理 代码实现 1 Spatial Weight 2 Similarity Weight 3 Color Filtering 在SSAO中的使用 1. 简介 图像平滑是一个重要 ...
- win7下VS2015+opencv3.1.0配置
由于opencv与vs的适配版本不同,本人在官网下载opencv3.1.0,其可以和VS2013.VS2015适配,文中以VS2015为例 opencv2.4.13-----vc11;vc12 ope ...
- [转]VS2015+OpenCV3.3 GPU模块和opencv_contrib模块的编译以及采用CMake编译opencv_contrib时提示“No extra modules found in folder”问题的解决方案
据官方说法,目前还不是太稳定的算法模块都在opencv_contrib里边,由于不稳定,所以不能在release版本里发行,只有在稳定以后才会放进release里边.但是这里边有很多我们经常要用的算法 ...
- Win10 64位+VS2015+Opencv3.3.0安装配置
Win10 64位+VS2015+Opencv3.3.0安装配置 1.我们首先下载VS2015.OpenCV3.3.0. 1.1 VS2015下载 在官网https://visualstudio.mi ...
- 【C++】双边滤波器(bilateral filter)
Bilateral Filtering for Gray and Color Images 双边滤波器:保留边界的平滑滤波器. 在局部上,就是在灰度值差异不大的区域平滑,在灰度值差异比较大的边界地区保 ...
- win10+VS2015+opencv3.4.0配置方法
win10+VS2015+opencv3.4.0配置方法 操作环境: windows10 64位opencv 3.4.0:https://opencv.org/releases.html(选择open ...
- vs2015+opencv3.3.1 实现 c++ 彩色高斯滤波器(Gaussian Smoothing, Gaussian Blur, Gaussian Filter)
//高斯滤波器 https://github.com/scutlzk#include <opencv2\highgui\highgui.hpp> #include <iostream ...
- vs2015+opencv3.3.1 实现 c++ 灰度高斯滤波器
#include <opencv2\highgui\highgui.hpp> #include <iostream> #include<vector> using ...
- win10+vs2015+opencv3.0 x86/x64配置(debug+release)
最近做一些图像识别的项目,用到了opencv,opencv3.1没有x86版本,所以只能用opencv3.0来完成,下面介绍一下在window10下vs2015 配置opencv3.0的过程(x86和 ...
随机推荐
- 概念与用法-cookie,session,auth (认证系统)
COOKIE 与 SESSION 概念 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie ...
- node.js的了解
在node环境上面运行js代码,js相当于php,node相当于apache环境 第一步装 node 环境1.从官网下载 dmg 文件安装 2.通过命令行安装 需要用到 homebrew(mac上专门 ...
- java成神之——java常识
java常识 简单DOS命令 java基础名词 java编译和运行流程 Eclipse常用快捷键 Eclipse相关操作 java基本数据类型 java基本数据类型转换 java常用运算符 java流 ...
- python爬西刺代理
爬IP代码 import requests import re import dauk from bs4 import BeautifulSoup import time def daili(): p ...
- NetBeans+Xdebug调试原理
使用Xdebug的远程调试,Xdebug作为一个嵌入到PHP的程序,扮演着客户端的角色,而IDE则作为服务器.下面的动态图展示了连接建立的过程. 服务端的IP为10.0.1.2, 使用HTTP协议,端 ...
- leetcode554
public class Solution { public int LeastBricks(IList<IList<int>> wall) { ) { ; } ; Dicti ...
- 关于苹果safari浏览器登陆时Cookie无法保存的问题
前段时间,修改了登录处理后给到客户端浏览器Cookie的内容,新增了一个姓名的value,发现safari不能保存该Cookie的内容,同时Chrome.firefox.ie等浏览器都能正常的访问,直 ...
- Vulkan Tutorial 09 图像与视图
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 使用任何的VkImage,包括在交换链或者渲染管线中的,我们都需要创建VkImage ...
- Jquery异步
一.Jquery向aspx页面请求数据$("#Button1").bind("click", function () { $.ajax({ type: &quo ...
- sqLSERVER 计划缓存
在这一期的性能调优培训里,我想详细谈下SQL Server里计划缓存及其副作用.在上一周你已经学到,每个提交给SQL Server的逻辑查询会编译成物理执行计划.那个执行计划然后会被缓存,即被称为计划 ...