Emgu-WPF学习使用-中值模糊
2024-10-02 02:47:50
实现效果:
实现途径:
前提:Image File-> System.Drawing.Bitmap->Image<Bgr, byte>
string sFile = GlobalVar.DATAS_PATH + "Samples/Test1.png";
BitmapImage oOriginBitSrc = new BitmapImage(new Uri(sFile));
System.Drawing.Image oImgOrigin = System.Drawing.Image.FromFile(sFile);
System.Drawing.Bitmap oBitmap = new System.Drawing.Bitmap(oImgOrigin);
Image<Bgr, byte> imgSrc = new Image<Bgr, byte>(oBitmap);
oBitmap.Dispose();
第一行效果:原图->中值模糊->高斯模糊->灰度化->Otsu二值化。
//中值模糊
Image<Bgr, byte> imgMedian = imgSrc.SmoothMedian(5); //使用5*5的卷积核
// 高斯模糊
Image<Bgr, byte> imgGaussian = imgMedian.SmoothGaussian(5);
// 灰度化
Image<Gray, byte> imgGray = new Image<Gray, byte>(imgGaussian.Size);
CvInvoke.CvtColor(imgGaussian, imgGray, ColorConversion.Bgr2Gray);
// Otsu二值化
Image<Gray, byte> imgThresholdOtsu = new Image<Gray, byte>(imgGray.Size);
CvInvoke.Threshold(imgGray, imgThresholdOtsu, 0, 255, ThresholdType.Otsu);
第二行效果:原图->灰度化 ->Otsu二值化 ->中值模糊
// 从原图直接灰度化
Image<Gray, byte> imgOriginGray = new Image<Gray, byte>(imgSrc.Size);
CvInvoke.CvtColor(imgSrc, imgOriginGray, ColorConversion.Bgr2Gray);
// Otsu二值化
Image<Gray, byte> imgOriginGrayThresholdOtsu = new Image<Gray, byte>(imgOriginGray.Size);
CvInvoke.Threshold(imgOriginGray, imgOriginGrayThresholdOtsu, 0, 255, ThresholdType.Otsu);
// 中值模糊
Image<Gray, byte> imgMedian = imgOriginGrayThresholdOtsu.SmoothMedian(5);
AppUtils.ShowGrayImage(this.ImgFun2Result3Zm, imgMedian);
第三行效果:原图 ->灰度化 ->高斯模糊->Otsu二值化
// 从原图直接灰度化
Image<Gray, byte> imgOriginGray = new Image<Gray, byte>(imgSrc.Size);
CvInvoke.CvtColor(imgSrc, imgOriginGray, ColorConversion.Bgr2Gray);
// 高斯模糊
Image<Gray, byte> imgGaussian = imgOriginGray.SmoothGaussian(5);
// Otsu二值化
Image<Gray, byte> imgOriginGrayThresholdOtsu = new Image<Gray, byte>(imgGaussian.Size);
CvInvoke.Threshold(imgGaussian, imgOriginGrayThresholdOtsu, 0, 255, ThresholdType.Otsu);
其他:转为BitmapSource在WPF的Image中呈现。
[DllImport("gdi32")]
private static extern int DeleteObject(IntPtr o);
/// <summary>
/// Convert an IImage to a WPF BitmapSource. The result can be used in the Set Property of Image.Source
/// </summary>
/// <param name="image">The Emgu CV Image</param>
/// <returns>The equivalent BitmapSource</returns>
public static BitmapSource ToBitmapSource(IImage image)
{
using (System.Drawing.Bitmap source = image.Bitmap)
{
IntPtr ptr = source.GetHbitmap(); //obtain the Hbitmap
BitmapSource bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
ptr,
IntPtr.Zero,
Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
DeleteObject(ptr); //release the HBitmap
return bs;
}
}
为了方便查看逐步效果,我提取了以下方法。
public static void ShowImage(System.Windows.Controls.Image oImage, UMat src)
{
oImage.Dispatcher.Invoke(() => {
oImage.Source = BitmapSourceConvert.ToBitmapSource(src);
});
}
public static void ShowBgrImage(System.Windows.Controls.Image oImage, Image<Bgr, byte> src)
{
oImage.Dispatcher.Invoke(() => {
oImage.Source = BitmapSourceConvert.ToBitmapSource(src);
});
}
public static void ShowGrayImage(System.Windows.Controls.Image oImage, Image<Gray, byte> src)
{
oImage.Dispatcher.Invoke(() => {
oImage.Source = BitmapSourceConvert.ToBitmapSource(src);
});
}
我参考了链接:点击打开链接 https://www.cnblogs.com/CoverCat/p/5055644.html
点击打开链接 http://www.cnblogs.com/CoverCat/p/5043833.html
最新文章
- selenium webdriver自动化测试
- 【转】JavaScript 异步进化史
- 解决HTML5布局,兼容IE问题
- word 与 endnote 反应慢的小技巧
- C#解析Json(多方法解析Json 一)
- JDBC基础一
- processon完全装逼指南
- javaScript中with的用法
- 一个跨域请求的XSS续
- [POJ] 2352 Stars [线段树区间求和]
- VMware 11安装Mac OS X 10.10 及安装Mac Vmware Tools(超详细),以及动态调整虚拟机硬盘大小
- Git合并分支出现的冲突解决
- [Swift]LeetCode974. 和可被 K 整除的子数组 | Subarray Sums Divisible by K
- Unity调试模式设置辅助线是否可见
- excel导入数据库实例(含源码 超级详细适合新手)
- python 取当前日期
- Spark JDBC入门测试
- vs2013 with update2安装记录
- aircrack-ng 破解无线网络
- JavaScript中callee,caller,argument的理解
热门文章
- Android 自定义RadioButton样式
- [GraphQL] Use GraphQLList with GraphQLObject Types
- href=";javascript:;"; href=";javascript:void(0);"; href=";#";区别
- [Angular] Ngrx/effects, Action trigger another action
- php如何利用标准输入输出实现在一个字符串中计算某个字符出现的个数?
- 【a703】求逆序对(线段树的解法)
- Opencv Surf算子中keyPoints,描述子Mat矩阵,配对向量DMatch里都包含了哪些好玩的东东?
- 微服务学习笔记(2)——使用Consul 实现 MagicOnion(GRpc) 服务注册和发现
- Eclipse Che开发Spring Web应用(入门) (二)
- QQ登录, 腾讯开放平台和QQ互联的坑