EMGU.CV入门(二、图片滤波)

22 篇文章 29 订阅
21 篇文章 0 订阅

一、目的

测试几种不同滤波的使用方式和效果
在这里插入图片描述
gitee地址

二、配置

见文章一

三、主要逻辑

在这里插入图片描述

四、代码

4.1 mainviewmodel

using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using System.Windows.Media.Imaging;

namespace Demo
{
    public class MainViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private WriteableBitmap _previewImage1;

        public WriteableBitmap PreviewImage1
        {
            get { return _previewImage1; }
            set { _previewImage1 = value; PropertyChanged?.Invoke(this,new PropertyChangedEventArgs("")); }
        }

        private WriteableBitmap _previewImage2;

        public WriteableBitmap PreviewImage2
        {
            get { return _previewImage2; }
            set { _previewImage2 = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("")); }
        }

        private WriteableBitmap _previewImage3;

        public WriteableBitmap PreviewImage3
        {
            get { return _previewImage3; }
            set { _previewImage3 = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("")); }
        }

        private WriteableBitmap _previewImage4;

        public WriteableBitmap PreviewImage4
        {
            get { return _previewImage4; }
            set { _previewImage4 = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("")); }
        }


        private WriteableBitmap _previewImage5;

        public WriteableBitmap PreviewImage5
        {
            get { return _previewImage5; }
            set { _previewImage5 = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("")); }
        }

        private WriteableBitmap _previewImage6;

        public WriteableBitmap PreviewImage6
        {
            get { return _previewImage6; }
            set { _previewImage6 = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("")); }
        }

        public MainViewModel() {
            ImageProcess();
        }

        private BitmapImage Bitmap2BitmapImage(Bitmap bitmap ) {
            using (MemoryStream ms = new MemoryStream()) {
                bitmap.Save(ms,ImageFormat.Bmp);
                BitmapImage bi = new BitmapImage();
                bi.BeginInit();
                bi.StreamSource = ms;
                bi.CacheOption = BitmapCacheOption.OnLoad;
                bi.EndInit();
                bi.Freeze();
                return bi;
            }
        }
        private void ImageProcess()
        {
            // 1. 加载原图
            Mat image1 = CvInvoke.Imread("test.png");
            PreviewImage1 = new WriteableBitmap(Bitmap2BitmapImage(image1.Bitmap));
            // 2. 中值滤波
            Mat image2 = new Mat();
            CvInvoke.MedianBlur(image1,image2,1);
            PreviewImage2 = new WriteableBitmap(Bitmap2BitmapImage(image2.Bitmap));
            // 3. 均值滤波
            Mat image3 = new Mat();
            CvInvoke.Blur(image1, image3, new Size(10,10),new Point(-1,-1));
            PreviewImage3 = new WriteableBitmap(Bitmap2BitmapImage(image3.Bitmap));
            // 4. 高斯滤波
            Mat image4 = new Mat();
            CvInvoke.GaussianBlur(image1, image4, new Size(5, 5), 4);
            PreviewImage4 = new WriteableBitmap(Bitmap2BitmapImage(image4.Bitmap));
            // 5. 双边滤波
            Mat image5 = new Mat();
            CvInvoke.BilateralFilter(image1, image5, 10,30,15);
            PreviewImage5 = new WriteableBitmap(Bitmap2BitmapImage(image5.Bitmap));
            // 6. 方框滤波
            Mat image6 = new Mat();
            CvInvoke.BoxFilter(image1, image6, DepthType.Cv8U,new Size(5,5),new Point(-1,-1));
            PreviewImage6 = new WriteableBitmap(Bitmap2BitmapImage(image6.Bitmap));       
        }
    }
}

4.2 xaml

<Window x:Class="Demo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Demo"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <!--图片显示-->
        <Image Source="{Binding PreviewImage1}"/>
        <Image Grid.Column="1"  Source="{Binding PreviewImage2}"/>
        <Image Grid.Column="2" Source="{Binding PreviewImage3}"/>
        <Image Grid.Row="1" Source="{Binding PreviewImage4}"/>
        <Image Grid.Row="1"  Grid.Column="1" Source="{Binding PreviewImage5}"/>
        <Image Grid.Row="1"  Grid.Column="2" Source="{Binding PreviewImage6}"/>
        <!--文字标注-->
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Bottom" FontSize="15" Foreground="Red" Text="原图"/>
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Bottom" FontSize="15" Foreground="Red" Text="中值滤波" Grid.Column="1"/>
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Bottom" FontSize="15" Foreground="Red" Text="均值滤波" Grid.Column="2"/>
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Bottom" FontSize="15" Foreground="Red" Text="高斯滤波" Grid.Row="1"/>
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Bottom" FontSize="15" Foreground="Red" Text="双边滤波" Grid.Row="1" Grid.Column="1"/>
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Bottom" FontSize="15" Foreground="Red" Text="方框滤波" Grid.Row="1" Grid.Column="2"/>

    </Grid>
</Window>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值