图像的高斯滤波
2016-05-28 22:00
183 查看
MakeGaussianData.h MakeGaussianData.c 是产生高斯滤波的数据的头文件、函数
MakeGaussianData.h
MakeGaussianData.c
2.GaussianFlur.h GaussianFlur.c是高斯滤波的头文件、核心函数
GaussianFlur.h
GaussianFlur.c
3.主函数
uCharDataToFloatData();
floatDataToUCharData();两个函数见链接
http://blog.csdn.net/jsf921942722/article/details/51526673
4.效果图
[b]*********************************3通道高斯滤波彩色图原图***************************[/b]
[b]*****************************3通道彩色高斯滤波后效果图******************[/b]
[b]*********************************1通道高斯滤波灰度图原图***************************[/b]
[b]*****************************1通道灰度高斯滤波后效果图******************[/b]
MakeGaussianData.h
#ifndef _MAKEGAUSSIANDATA_H_ #define _MAKEGAUSSIANDATA_H_ #ifdef __cplusplus extern "C" { #endif int makeGaussianData(float ** data, int width, int height, float filterRatio); #ifdef __cplusplus } #endif #endif
MakeGaussianData.c
#include <stdio.h> #include <math.h> #include <memory.h> #include <malloc.h> #define ENumber 2.71828183f #define PI 3.1415926f int makeGaussianData(float ** data, int width, int height, float filterRatio){ int i, j; *data = (float*)malloc(sizeof(float) * width * height); for(i = 0; i < height; i ++){ for(j = 0; j < width; j ++){ float temp = 0.0f; temp = -1.0f * ((j - width / 2) * (j - width / 2) + (i - height / 2) * (i - height / 2)) / (2.0f * filterRatio * filterRatio); temp = powf(ENumber, temp); (*data)[i * width + j] = (1.0f / (2.0f * PI * filterRatio * filterRatio)) * temp; } } return 0; }
2.GaussianFlur.h GaussianFlur.c是高斯滤波的头文件、核心函数
GaussianFlur.h
#ifndef _GAUSSIANFLUR_H_ #define _GAUSSIANFLUR_H_ #ifdef __cplusplus extern "C" { #endif int gaussianFlurFunction(float * inData, float * outData, int dataWidth, int dataHeight, int gaussianWidth, int gaussianHeight, float filterRatio, int channels); #ifdef __cplusplus } #endif #endif
GaussianFlur.c
#include <stdio.h> #include <stdlib.h> #include "MakeGaussianData.h" #include "GaussianFlur.h" int gaussianFlurFunction(float * inData, float * outData, int dataWidth, int dataHeight, int gaussianWidth, int gaussianHeight, float filterRatio, int channels){ float * data = NULL; int i, j, z; int m, n; int widthTemp, heightTemp; float sumNumber = 0.0f; if(channels > 32){ printf("channels is larger.\n"); return -1; } if(gaussianWidth % 2 == 0){ widthTemp = gaussianWidth / 2 - 1; }else{ widthTemp = gaussianWidth / 2; } if(gaussianHeight % 2 == 0){ heightTemp = gaussianHeight / 2 - 1; }else{ heightTemp = gaussianHeight / 2; } makeGaussianData(&data, gaussianWidth, gaussianHeight, filterRatio); for(z = 0; z < channels; z ++){ for(i = 0; i < dataHeight; i ++){ for(j = 0; j < dataWidth; j ++){ sumNumber = 0.0f; for(m = -heightTemp; m < gaussianHeight - heightTemp; m ++){ for(n = -widthTemp; n < gaussianWidth - widthTemp; n ++){ if(i + m >= 0 && j + n >= 0 && i + m < dataHeight && j + n < dataWidth){ sumNumber += inData[((i + m) * dataWidth + (j + n)) * channels + z]; } } } outData[(i * dataWidth + j) * channels + z] = sumNumber; } } } free(data); return 0; }
3.主函数
#include "stdafx.h" #include "MakeGaussianData.h" #include "Tools.h" #include "GaussianFlur.h" #include <opencv2\opencv.hpp> using namespace cv; int main() { int imageWidth, imageHeight; int channels = 1; Mat mImage = imread("D:\\workSpace\\VSWorkSpace\\ImageProcess\\ImageProcess\\gaussianImage.jpg", 1); imshow("srcImage", mImage); float * imageData = NULL; float * imageOutData = NULL; imageWidth = mImage.cols; imageHeight = mImage.rows; channels = mImage.channels(); imageData = (float*)malloc(sizeof(float) * imageWidth * imageHeight * channels); imageOutData = (float*)malloc(sizeof(float) * imageWidth * imageHeight * channels); uCharDataToFloatData(mImage.data, imageData, imageWidth, imageHeight, channels); gaussianFlurFunction(imageData, imageOutData, imageWidth, imageHeight, 5, 5, 0.1f, channels); floatDataToUCharData(imageOutData, mImage.data, imageWidth, imageHeight, channels, 1); imshow("gaussianImage", mImage); waitKey(0); free(imageData); free(imageOutData); return 0; }
uCharDataToFloatData();
floatDataToUCharData();两个函数见链接
http://blog.csdn.net/jsf921942722/article/details/51526673
4.效果图
[b]*********************************3通道高斯滤波彩色图原图***************************[/b]
[b]*****************************3通道彩色高斯滤波后效果图******************[/b]
[b]*********************************1通道高斯滤波灰度图原图***************************[/b]
[b]*****************************1通道灰度高斯滤波后效果图******************[/b]
相关文章推荐
- PHP GD 图像处理组件的常用函数总结
- PHP图像处理之imagecreate、imagedestroy函数介绍
- jsvascript图像处理―(计算机视觉应用)图像金字塔
- Javascript图像处理思路及实现代码
- PHP图像处理之使用imagecolorallocate()函数设置颜色例子
- java数字图像处理基础使用imageio写图像文件示例
- 使用Java进行图像处理的一些基础操作
- javascript图像处理―边缘梯度计算函数
- Javascript图像处理―阈值函数实例应用
- Javascript图像处理―虚拟边缘介绍及使用方法
- PHP图像处理类库及演示分享
- CI框架文件上传类及图像处理类用法分析
- php图像处理函数大全(推荐收藏)
- Javascript图像处理―图像形态学(膨胀与腐蚀)
- Javascript图像处理―平滑处理实现原理
- Swift图像处理之优化照片
- 在Ubuntu上安装OpenCV3.0和Python-openCV的经历
- CI框架文件上传类及图像处理类用法分析
- VTK学习笔记之图像处理
- vtk 图像处理 多种 操作