Emgu-WPF学习使用-中值模糊

原文:Emgu-WPF学习使用-中值模糊

实现效果:

实现途径:

前提: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?

原文地址:https://www.cnblogs.com/lonelyxmas/p/9472680.html

时间: 2024-10-09 23:54:13

Emgu-WPF学习使用-中值模糊的相关文章

最快的3x3中值模糊

10.1国庆后,知名博主:laviewpbt  http://www.cnblogs.com/Imageshop/ 发起了一个优化3x3中值模糊的小活动. 俺也参加其中,今天博主laviewpbt  共享了一份不错的CLAHE代码. free精神,真心为其点赞. 故俺也分享这份最快的3x3中值模糊的代码. /// 编写者: laviewpbt, 编写时间: 2015.10.16, 联系QQ: 33184777 /// <summary> /// 快速的实现3*3大小的中值模糊,边缘1像素未做处

OpenCV中值模糊方法

效果图 源码 KqwOpenCVBlurDemo 步骤 将获取到的Bitmap图片转成Mat对象 // Bitmap转为Mat Mat src = new Mat(bitmap.getHeight(), bitmap.getWidth(), CvType.CV_8UC4); Utils.bitmapToMat(bitmap, src); 调用OpenCV的中值模糊方法 // 中值模糊方法 Imgproc.medianBlur(src, src, 33); 将处理完的Mat数据转成Bitmap对象

【opencv学习笔记1】5种图像滤波辨析:方框、均值、高斯、中值、双边

图像滤波 什么是图像滤波 图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性. 图像滤波的目的 a.消除图像中混入的噪声 b.为图像识别抽取出图像特征 图像滤波的要求 a.不能损坏图像轮廓及边缘 b.图像视觉效果应当更好 滤波器的定义 滤波器,顾名思义,是对波进行过滤的器件.(摘自网络) 以上的定义是针对物理器件的,但对于图像滤波而言显然也是适用的. 大家都用过放大镜,这里就以此举一个例

Atitit &#160;&#160;图像处理&#160;平滑&#160;也称&#160;模糊,&#160;归一化块滤波、高斯滤波、中值滤波、双边滤波)

Atitit   图像处理 平滑 也称 模糊, 归一化块滤波.高斯滤波.中值滤波.双边滤波) 是一项简单且使用频率很高的图像处理方法 用途 去噪 去雾 各种线性滤波器对图像进行平滑处理,相关OpenCV函数如下: 归一化块滤波器 (Normalized Box Filter) § 最简单的滤波器, 输出像素值是核窗口内像素值的 均值 ( 所有像素加权系数相等) § 高斯滤波器 (Gaussian Filter) § 最有用的滤波器 (尽管不是最快的). 高斯滤波是将输入数组的每一个像素点与 高斯

opencv3 图片模糊操作-均值滤波 高斯滤波 中值滤波 双边滤波

#include <iostream>#include <opencv2/opencv.hpp> using namespace std;using namespace cv; //均值滤波模糊处理int demo_blur(){ char win1[] = "window1"; char win2[] = "window2"; Mat img1, img2; img1 = imread("D://images//4.jpg&quo

opencv初学习-椒盐噪声-中值滤波-均值滤波-腐蚀膨胀

#include <opencv2\opencv.hpp>#include <opencv2\highgui\highgui.hpp>#include <opencv2\imgcodecs\imgcodecs.hpp>#include<iostream>#include<vector>#include<algorithm>#include<math.h>#include<iomanip>void salt(cv

【WPF学习】第三章 使用其他名称空间中的类型

前面已经介绍了如何在XAML中使用WPF中的类来创建基本的用户界面.但XAML是实例化.NET对象的通用方法,包括那些位于其他非WPF名称空间以及自己创建的名称空间中的对象. 创建那些不是用于在XAML窗口中显示的对象听起来像是多余的,但在很多情况下这是需要的.一个例子是,但使用数据绑定并希望在某个控件上显示从其他对象提取的信息时.另外一个例子是希望使用非WPF对象为WPF对象设置属性时. 例如,可使用数据对象填充WPF的ListBox控件.ListBox控件将调用ToString()方法来获取

WPF学习之绘图和动画

如今的软件市场,竞争已经进入白热化阶段,功能强.运算快.界面友好.Bug少.价格低都已经成为了必备条件.这还不算完,随着计算机的多媒体功能越来越强,软件的界面是否色彩亮丽.是否能通过动画.3D等效果是否吸引用户的眼球也已经成为衡量软件的标准. 软件项目成功的三个要素是:资源.成本.时间.无论是为了在竞争中保持不败还是为了激发起用户对软件的兴趣,提高软件界面的美化程度.恰当的将动画和3D等效果引入应用程序都是一个必然趋势.然而使用传统的桌面应用程序开发工具和框架(如Winform.MFC.VB.D

WPF学习:3.Border &amp; Brush

上一章<WPF学习:2.Layout-Panels-Countainers>主要介绍了布局,容器和面板.这一章主要开始介绍Border(边界)和Brush(画刷). 代码地址:http://www.cnblogs.com/keylei203/archive/2013/03/12/keylei203.html 引言 在任何WPF的程序设计中,Border都占主要部分,一般都会使用很多Border装饰用户界面.从直接在window上放置borders到在ListBoxItem上放置Borders,