1、安裝OpencvSharp
我使用的是VS2013 社區版,安裝OpencvSharp3.0
在線安裝方法:進入Tools,打開NuGet的包管理器
搜索Opencv
安裝之后就可以使用,無需再做其他配置。
但是有個問題就是每新建一個解決方案就得重新下載安裝,對網速慢的小伙伴很不友好。
離線安裝方法:
打開一個已經安裝過OpencvSharp3的解決方案的目錄,在Package目錄下有OpencvSharp的安裝包,
后綴為nupkg。
打開新建的未安裝OpencvSharp的解決方案,進到Tools,NuGet管理器,選擇左下角的Setting。
添加一個package source,並將其source設置為剛才OpencvSharp安裝包所在的目錄即可,然后取一個好記得名字。
回到NuGet包管理界面,會發現Online里多了一個Package Source 選項,這個選項里可以看到剛才目錄下的安裝包,點擊安裝即可。
2、建立WPF工程
新建WPF工程,拖入兩個button,一個Image控件。
為了使用OpencvSharp,需要在文件開頭添加:
using OpenCvSharp;
之后在button1的響應函數下添加圖片顯示的代碼:
Mat image = new Mat(@"girl.png", ImreadModes.Color); Cv2.ImShow("Demo", image); Cv2.WaitKey(0);
這樣就實現了圖片顯示的功能,但是圖片會顯示在一個彈出的窗口上,而不會顯示在Image控件上。
3、Bitmap 轉 BitmapImage
將圖片顯示在Image控件上很簡單,只需要設置Image控件的source屬性,可參考:WPF中使用Image控件顯示圖片 - CSDN博客 https://blog.csdn.net/chuangand/article/details/48031271
WPFImge.Source = BitmapImage;
因此需要把Mat類型轉化為BitmapImage類型。
先把Mat轉化為Bitmap類型:
public Bitmap MatToBitmap(Mat image) { return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(image); }
再轉化為BitmapImage類型。
public BitmapImage MatToBitmapImage(Mat image) { Bitmap bitmap = MatToBitmap(image); using (MemoryStream stream = new MemoryStream()) { bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png); // 坑點:格式選Bmp時,不帶透明度 stream.Position = 0; BitmapImage result = new BitmapImage(); result.BeginInit(); // According to MSDN, "The default OnDemand cache option retains access to the stream until the image is needed." // Force the bitmap to load right now so we can dispose the stream. result.CacheOption = BitmapCacheOption.OnLoad; result.StreamSource = stream; result.EndInit(); result.Freeze(); return result; } }
最后在button2的響應函數中添加顯示圖像的代碼:
private void button2_Click(object sender, RoutedEventArgs e) { try { Mat image = new Mat(@"girl.png", ImreadModes.Color); WPFImge.Source = MatToBitmapImage(image); } catch(Exception exp) { MessageBox.Show(exp.ToString()); return; } }
參考文獻:
c# 4.0 - How can I convert Mat to Bitmap using OpenCVSharp? - Stack Overflow https://stackoverflow.com/questions/37540750/how-can-i-convert-mat-to-bitmap-using-opencvsharp
【C#/WPF】Bitmap、BitmapImage、ImageSource 、byte[]轉換問題 - CSDN博客 https://blog.csdn.net/qq_18995513/article/details/53693554
4、添加引用:using和reference
上一節中用到的變量類型對應的命名空間如下:
using System.Windows.Media.Imaging; //使用BitMapImage類型 using OpenCvSharp; //OpencvSharp using System.Drawing; //使用Bitmap類型 using System.IO; //使用MemoryStream類型
如果代碼中添加了命名空間還是報錯,就需要手動添加reference。
首先看看用到的命名空間是否在現有的reference中:
如果沒有,就要手動Add Reference…比如我新建的項目中就沒有自動添加Drawing這個命名空間:










