【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing @163.com】
? ? ? ? 圖像處理是工業生產重要的環節。不管是定位、測量、檢測還是識別,圖像處理在工業生產中扮演重要的角色。而c#由于自身快速開發的特點,十分適合用來進行圖像處理開發。目前來說,如果大家對opencv比較熟悉,可以借助于c# + opencv來進行圖像處理。如果只是純應用的話,用c# + halcon對圖像進行處理,也是可以的。
? ? ? ? 當然,除了圖像之外,還要注意光源和鏡頭,這部分可以在實際遇到具體問題的時候再處理。今天可以先打一個基礎,有一個基本的印象。本次使用到的庫是opencv的c#庫,版本是OpenCvSharp3-AnyCPU,這個需要注意下。
1、下載lena標準圖片
? ? ? ? 學習數字圖像處理的同學都知道,lena標準圖片是我們學習的重要參考資料。
2、安裝OpenCvSharp3-AnyCPU庫
? ? ? ? 下載的方法也是很簡單,直接打開NuGet工具包,輸入OpenCvSharp3-AnyCPU即可,直接單擊下載,
3、界面設計
? ? ? ? 界面設計也不復雜。目前只是為了demo演示使用,整個demo分成了兩個部分,左邊是按鈕,右邊是圖像顯示。而右側圖像顯示的部分又分成了處理后的圖像、原圖像兩個子區域部分。
? ? ? ? 關于功能部分的按鈕,這里只是添加了一個灰化的按鈕,有需要進一步拓展的同學,可以繼續去增加別的按鈕,豐富軟件的功能,增加一下軟件的實用性。
? ? ? ? 它的xaml部分代碼是這樣的,
<Window x:Class="WpfApp.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:WpfApp"mc:Ignorable="d"Title="MainWindow" Height="550" Width="1000"><Grid><DockPanel><StackPanel Width="130" DockPanel.Dock="Left" Margin="10"><Button Name="btnChange2" Content="圖片灰顯" Click="BtnChange2_Click" Margin="0,5,0,0"></Button></StackPanel><DockPanel VerticalAlignment="Top" Margin="10,10,10,10"><Image DockPanel.Dock="Right" Name="imgOrignal" Source="C:\Users\feixiaoxing\Desktop\WpfApp\WpfApp\bin\Debug\test.png" Stretch="UniformToFill" Width="400" ></Image><Image Name="imgOutput" Source="C:\Users\feixiaoxing\Desktop\WpfApp\WpfApp\bin\Debug\test.png" Stretch="UniformToFill" Width="400"></Image></DockPanel></DockPanel></Grid>
</Window>
4、代碼設計和驗證
? ? ? ? 代碼設計也比較簡單,主要就是編寫BtnChange2_Click這個回調函數。此外,由于Mat生成的時候,可以直接創建灰度圖,所以代碼其實不算復雜,大家掌握這個流程邏輯就可以了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;using OpenCvSharp;
using OpenCvSharp.Extensions;
using System.Drawing;namespace WpfApp
{/// <summary>/// MainWindow.xaml 的交互邏輯/// </summary>public partial class MainWindow : System.Windows.Window{public MainWindow(){InitializeComponent();}private void BtnChange2_Click(object sender, RoutedEventArgs e){using (var src = new Mat(@"C:\Users\feixiaoxing\Desktop\WpfApp\WpfApp\bin\Debug\test.png", ImreadModes.Grayscale)){var mem = src.ToMemoryStream();BitmapImage bmp = new BitmapImage();bmp.BeginInit();bmp.StreamSource = mem;bmp.EndInit();imgOutput.Source = bmp;}}}
}
? ? ? ? 代碼編寫無誤后,沒有錯誤的話,就可以直接打開運行。打開之后,單擊左邊的按鈕,我們一會就可以看到一張灰度圖和一張彩色圖了,這說明整個代碼編寫應該是沒有問題的。