1、什么是OpenCVSharp
OpenCVSharp有一名日本工程師開發,項目地址為:https://github.com/shimat/opencvsharp。其是OpenCV的.NET wrapper,它比Emgucv更接近於原始的OpenCV,並且有很多的樣例參考。
2、OpenCVSharp特點
- 直接封裝了更多的OpenCV方法,降低了學習的難度,比EmguCV更便於使用
- 大部分繼承了IDisposable接口,方便使用using語句
- 可以直接調用原始風格的OpenCV方法
- 可以將圖像對象直接轉換成GDI使用的Bitmap和WPF的WriteBitmap
- 支持Mono。
3、OpenCVSharp在VS中的環境配置
第一種:NuGet程序包管理器中搜索並安裝:
OpenCvSharp4
OpenCvSharp4.runtime.win
此種方法未成功,安裝過程報錯。
第二種:下載OpenCvSharp4安裝包
github網址: https://github.com/shimat/opencvsharp
releases網址:https://github.com/shimat/opencvsharp/releases
下載好之后解壓到一個文件夾(任意的文件夾)
解壓好之后,在【解決方案】中右鍵【引用】->【添加引用】,選擇【瀏覽】,將下載文件中的OpenCvSharp.dll、OpenCvSharp.Extensions.dll文件添加進引用。
將下載文件中的OpenCvSharpExtern.dll復制到可執行文件的Debug/Release文件夾下,所有配置OK,下面測試是否配置成功。
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//添加相應的引用即可
using OpenCvSharp;
using OpenCvSharp.Extensions;
namespace OpenCVSharpTest
{
class Program
{
static void Main(string[] args)
{
//讀取圖片
Mat img = Cv2.ImRead(@"./test.jpg", ImreadModes.Unchanged);
Cv2.NamedWindow("demo", WindowFlags.Normal); //創建名字為demo的窗體
Cv2.ImShow("demo", img); //在demo窗體上顯示
Cv2.WaitKey(0);
}
}
}
項目中遇到的坑:
在C++中,ROI是可以這樣定義的。image是事先定義的Mat:
Mat imageROI = image(Rect(500, 250, logo.cols, logo.rows));
而在C#中,要這樣定義:
Mat dstImg = new Mat(srcImg, new Rect(x, y, width, height));
當時想用C++的Style來定義,搞了半天發現根本就沒實現,后來發現C#是不能對括號進行重載的。
C#這方面的話還是要用熟練,搞機器視覺這行還是很有用的。
OpenCvSharp.NativeMethods”的類型初始值設定項引發異常:
1. 首先
報錯 “OpenCvSharp.Mat”的類型初始值設定項引發異常 缺少opencvsharpExtern.dll
直接添加引用 opencvsharpExtern.dll 可能會報錯
直接拷入相應項目的 bin/debug或bin/release 里就好了
2 如果1中方法不行, 做完1后 如下 將目標平台改為X64