EMGU 阈值、滤波处理
2016-09-13 20:04
302 查看
/// <summary>
/// 对整张图片设定两个值进行阈值处理
/// </summary>
/// <param name="src">输入一张图片</param>
/// <param name="dst">输出一张图片</param>
/// <param name="threshold">阈值</param>
/// <param name="maxValue">最大的阈值</param>
/// <param name="thresholdType">处理阈值的类型</param>
/// <returns></returns>
public static double Threshold(IInputArray src, IOutputArray dst, double threshold, double maxValue, ThresholdType thresholdType);
// 摘要: Threshold方法最后一个枚举参数
// Types of thresholding
public enum ThresholdType
{
// 摘要: value>=阈值就为最大值,否则为0. 最大值是'maxValue'方法所设定的最大值
// value = value > threshold ? max_value : 0
Binary = 0,
//
// 摘要:(返向阈值) value>=阈值就为0,否则为最大值. 最大值是'maxValue'方法所设定的最大值
// value = value > threshold ? 0 : max_value
BinaryInv = 1,
//
// 摘要: value>=阈值就为threshold,否则值不变.
// value = value > threshold ? threshold : value
Trunc = 2,
//
// 摘要: value>=阈值就value不变,否则为0
// value = value > threshold ? value : 0
ToZero = 3,
//
// 摘要: value>=阈值为0,否则为value不变
// value = value > threshold ? 0 : value
ToZeroInv = 4,
//
Mask = 7,
//
// 摘要: 使用Otsu算法选择最优阈值,和Threshold调用的threshold与maxValue没有关系.
// use Otsu algorithm to choose the optimal threshold value; combine the flag
// with one of the above CV_THRESH_* values
Otsu = 8,
}
//////////////////////////////////////////局部阈值///////////////////////////////////////////////////
/// <summary>
/// 局部阈值,应用于边缘处理.
/// </summary>
/// <param name="src">输入一张8位或32位图片</param>
/// <param name="dst">输出一张图片</param>
/// <param name="maxValue">给定最大阈值</param>
/// <param name="adaptiveType">人为阈值是AdaptiveThresholdType枚举算出来的,平均自适应阈值和高斯阈值.</param>
/// <param name="thresholdType">阈值类型处理,请参见前面Threshold方法介绍</param>
/// <param name="blockSize">用来计算阈值的象素邻域大小: 3, 5, 7, ... </param>
/// <param name="param1">人工干预阈值</param>
public static void AdaptiveThreshold(IInputArray src, IOutputArray dst, double maxValue, AdaptiveThresholdType adaptiveType, ThresholdType thresholdType, int blockSize, double param1);
// 摘要:
// Types of Adaptive Threshold
public enum AdaptiveThresholdType
{
// 摘要: 平均值应用于自适应阈值。
// indicates that "Mean minus C" should be used for adaptive threshold.
MeanC = 0,
// 摘要: 高斯均值应用于阈值。
// indicates that "Gaussian minus C" should be used for adaptive threshold.
GaussianC = 1,
}
//如果第五个参数使用Emgu.CV.CvEnum.ThresholdType.Binary,最后一个param1值越大就越偏向白色,如果param1值为负数就偏向黑色.
/////////////////////////////////////////////////////////滤波////////////////////////////////////////////////////
/// <summary>
/// 模糊的图像进行中值滤波.特别是处理椒盐滤波.
/// </summary>
/// <param name="src">输入图片</param>
/// <param name="dst">输出图片</param>
/// <param name="ksize">孔径线性大小;它必须是奇数和大于1</param>
public static void MedianBlur(IInputArray src, IOutputArray dst, int ksize);
//均值滤波和高斯滤波会让图片变的模糊,可能用的不多,没做笔记.
/// <summary>
/// 双边滤波,保护边缘的平滑滤波器.类相机磨皮处理(美颜效果)
/// </summary>
/// <param name="src">输入图像</param>
/// <param name="dst">输出图像</param>
/// <param name="d">表示在过滤的过程中的每个像素的直径,如果非正数,它将会从sigmaSpace计算得到.</param>
/// <param name="sigmaColor">颜色空间的滤波器的'西格玛'值,更大的值的参数意味着更远的颜色像素内</param>
/// <param name="sigmaSpace">坐标空间中滤波的'西格玛'值,当D>0,d指定的了领域大小与sigmaSpace无关.</param>
/// <param name="borderType">边界模式用于推断像素的图像,设定为默认</param>
public static void BilateralFilter(IInputArray src, IOutputArray dst, int d, double sigmaColor, double sigmaSpace, BorderType borderType = BorderType.Default);
例:CvInvoke.BilateralFilter(img, dst, 10, 30, 15);
//////////////////////////////////////////////////////自定义滤波//////////////////////////////////
/// <summary>
/// 自定义滤波
/// </summary>
/// <param name="src">源图</param>
/// <param name="dst">输出图片</param>
/// <param name="kernel">单通道内核矩阵</param>
/// <param name="anchor">内核偏移量,中心表示为(-1,-1)</param>
/// <param name="delta">0</param>
/// <param name="borderType">推断出图像外部像素的某种边界.一般都不写(预设)</param>
public static void Filter2D(IInputArray src, IOutputArray dst, IInputArray kernel, Point anchor, double delta = 0, BorderType borderType = BorderType.Default);
例:
int[, ,] date = new[, ,] { { { -1 }, { -1 }, { -1 } }, { { -1 }, { 9 }, { -1 } }, { { -1 }, { -1 }, { -1 } } };
Image<Gray, int> kennel = new Image<Gray, int>(date);
Image<Gray, byte> img = new Image<Gray, byte>(of.FileName);
Image<Gray, byte> dst = new Image<Gray, byte>(of.FileName);//这里不能Image<Bgr, byte> dst = img;
CvInvoke.Filter2D(img, dst, kennel, new Point(-1, -1));
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// 对整张图片设定两个值进行阈值处理
/// </summary>
/// <param name="src">输入一张图片</param>
/// <param name="dst">输出一张图片</param>
/// <param name="threshold">阈值</param>
/// <param name="maxValue">最大的阈值</param>
/// <param name="thresholdType">处理阈值的类型</param>
/// <returns></returns>
public static double Threshold(IInputArray src, IOutputArray dst, double threshold, double maxValue, ThresholdType thresholdType);
// 摘要: Threshold方法最后一个枚举参数
// Types of thresholding
public enum ThresholdType
{
// 摘要: value>=阈值就为最大值,否则为0. 最大值是'maxValue'方法所设定的最大值
// value = value > threshold ? max_value : 0
Binary = 0,
//
// 摘要:(返向阈值) value>=阈值就为0,否则为最大值. 最大值是'maxValue'方法所设定的最大值
// value = value > threshold ? 0 : max_value
BinaryInv = 1,
//
// 摘要: value>=阈值就为threshold,否则值不变.
// value = value > threshold ? threshold : value
Trunc = 2,
//
// 摘要: value>=阈值就value不变,否则为0
// value = value > threshold ? value : 0
ToZero = 3,
//
// 摘要: value>=阈值为0,否则为value不变
// value = value > threshold ? 0 : value
ToZeroInv = 4,
//
Mask = 7,
//
// 摘要: 使用Otsu算法选择最优阈值,和Threshold调用的threshold与maxValue没有关系.
// use Otsu algorithm to choose the optimal threshold value; combine the flag
// with one of the above CV_THRESH_* values
Otsu = 8,
}
//////////////////////////////////////////局部阈值///////////////////////////////////////////////////
/// <summary>
/// 局部阈值,应用于边缘处理.
/// </summary>
/// <param name="src">输入一张8位或32位图片</param>
/// <param name="dst">输出一张图片</param>
/// <param name="maxValue">给定最大阈值</param>
/// <param name="adaptiveType">人为阈值是AdaptiveThresholdType枚举算出来的,平均自适应阈值和高斯阈值.</param>
/// <param name="thresholdType">阈值类型处理,请参见前面Threshold方法介绍</param>
/// <param name="blockSize">用来计算阈值的象素邻域大小: 3, 5, 7, ... </param>
/// <param name="param1">人工干预阈值</param>
public static void AdaptiveThreshold(IInputArray src, IOutputArray dst, double maxValue, AdaptiveThresholdType adaptiveType, ThresholdType thresholdType, int blockSize, double param1);
// 摘要:
// Types of Adaptive Threshold
public enum AdaptiveThresholdType
{
// 摘要: 平均值应用于自适应阈值。
// indicates that "Mean minus C" should be used for adaptive threshold.
MeanC = 0,
// 摘要: 高斯均值应用于阈值。
// indicates that "Gaussian minus C" should be used for adaptive threshold.
GaussianC = 1,
}
//如果第五个参数使用Emgu.CV.CvEnum.ThresholdType.Binary,最后一个param1值越大就越偏向白色,如果param1值为负数就偏向黑色.
/////////////////////////////////////////////////////////滤波////////////////////////////////////////////////////
/// <summary>
/// 模糊的图像进行中值滤波.特别是处理椒盐滤波.
/// </summary>
/// <param name="src">输入图片</param>
/// <param name="dst">输出图片</param>
/// <param name="ksize">孔径线性大小;它必须是奇数和大于1</param>
public static void MedianBlur(IInputArray src, IOutputArray dst, int ksize);
//均值滤波和高斯滤波会让图片变的模糊,可能用的不多,没做笔记.
/// <summary>
/// 双边滤波,保护边缘的平滑滤波器.类相机磨皮处理(美颜效果)
/// </summary>
/// <param name="src">输入图像</param>
/// <param name="dst">输出图像</param>
/// <param name="d">表示在过滤的过程中的每个像素的直径,如果非正数,它将会从sigmaSpace计算得到.</param>
/// <param name="sigmaColor">颜色空间的滤波器的'西格玛'值,更大的值的参数意味着更远的颜色像素内</param>
/// <param name="sigmaSpace">坐标空间中滤波的'西格玛'值,当D>0,d指定的了领域大小与sigmaSpace无关.</param>
/// <param name="borderType">边界模式用于推断像素的图像,设定为默认</param>
public static void BilateralFilter(IInputArray src, IOutputArray dst, int d, double sigmaColor, double sigmaSpace, BorderType borderType = BorderType.Default);
例:CvInvoke.BilateralFilter(img, dst, 10, 30, 15);
//////////////////////////////////////////////////////自定义滤波//////////////////////////////////
/// <summary>
/// 自定义滤波
/// </summary>
/// <param name="src">源图</param>
/// <param name="dst">输出图片</param>
/// <param name="kernel">单通道内核矩阵</param>
/// <param name="anchor">内核偏移量,中心表示为(-1,-1)</param>
/// <param name="delta">0</param>
/// <param name="borderType">推断出图像外部像素的某种边界.一般都不写(预设)</param>
public static void Filter2D(IInputArray src, IOutputArray dst, IInputArray kernel, Point anchor, double delta = 0, BorderType borderType = BorderType.Default);
例:
int[, ,] date = new[, ,] { { { -1 }, { -1 }, { -1 } }, { { -1 }, { 9 }, { -1 } }, { { -1 }, { -1 }, { -1 } } };
Image<Gray, int> kennel = new Image<Gray, int>(date);
Image<Gray, byte> img = new Image<Gray, byte>(of.FileName);
Image<Gray, byte> dst = new Image<Gray, byte>(of.FileName);//这里不能Image<Bgr, byte> dst = img;
CvInvoke.Filter2D(img, dst, kennel, new Point(-1, -1));
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
相关文章推荐
- Emgu Image IntPtr
- LPR牌超识别
- Hough线变换
- Canny 边缘检测 (Emgu.CV)
- Emgu在VS2012中的安装和配置
- 关于Emgu安装和使用中遇到的问题和解决办法
- EmguCV第一个程序,读入图像并显示
- Emgu 两幅图像相减计算
- 在winform中使用Kinect 2.0 for Windows显示色彩数据流
- 【EMGU】EMGU中人脸检测的例子
- win8.1 下 VS2013 + Emgu Cv 配置
- C#+vs2013+windows10配置emgu技巧
- 一个基于Emgu的运动检测实例
- Emgu.CV.CvInvoke的类型初始值设定项引发异常--解决办法
- EmguCV 简介、安装、环境配置 (Windows 7)
- “Emgu.CV.CvInvoke”的类型初始值设定项引发异常,无法加载 DLL“cvextern”: 找不到指定的模块
- vs2010 c# EmguCV 环境的搭建和配置
- [KinectWPF程序]1深度图像,使用WriteableBitmap对象改进Kinect图像显示&复杂的Kinect初始化方法
- EMGU OCR
- 模板匹配