Wrapper’lar (EmguCV) ile OpenCV Arasındaki Farklar Nelerdir?
EmguCV’nin bir OpenCV wrapper’ı olduğundan daha önce bahsetmiştik (EmguCV ile ilgili daha fazla bilgi için buradaki yazıya ve videoya göz atabilirsiniz), peki OpenCV ile arasındaki farklar nelerdir, projelerinizde OpenCV mi yoksa EmguCV mi tercih etmeliyiz sorusunun cevabına bakalım. Bildiğiniz üzere wrapper’lar geliştirilen kütüphaneyi referans alarak istenilen platform/teknoloji/dil için çalıştırılabilir/kullanılabilir yapmayı amaçlar. Bu amaç doğrultusunda EmguCV geliştiricileri native OpenCV kütüphanesinin fonksiyonlarını, sınıflarını ve algoritmalarını alırlar, bu fonksiyonları .NET ile çalıştırabilmek için native kütüphaneleri kullanan bir kütüphane yani .net karşılığı library project geliştirirler. .NET (C#,VB.NET vb.) geliştiricisi tarafından çağrılan bir fonksiyon veya kullanılan bir sınıf öncelikle EmguCV.dll’ine gider gelen/kullanılan istek/fonksiyon/sınıf işlenir ve karşılığı olan OpenCV kütüphanesi üzerinden çağrılır. İstekler ve fonksiyonlar bire bir olarak aynı değildir geliştiriciler platform/teknoloji arası farklılıklardan dolayı bazı değişiklikler yapmışlar gerek ekleme gerekse çıkarma yaparak .NET için kullanılabilir olmayı amaçlamışlardır. Bu sebeplerden dolayı çağrılan/kullanılan algoritmaya göre EmguCV ve OpenCV arasında performans farklıkları olabilir.
Teorik olarak bakıldığında her zaman en alt seviyedeki kütüphane daha hızlı çalışacaktır fakat platforma göre yapılan değişiklikler bu durumu tersine çevirerek bazı özel fonksiyonlarda yüksek seviye (EmguCV) kütüphaneleri daha performanslı kılmaktadır. Projeniz .NET ile geliştirilecekse doğrudan OpenCV kullanmanız mümkün olmayacaktır bu yüzden OpenCV mi EmguCV mi diye sormak yerine EmguCV mi yoksa diğer .NET wrapper’lar mı (Opencvsharp, OpenCVDotNet, SharperCV vb.)diye sormak daha doğru olacaktır. Bu soru da ücretlimi yoksa ücretsiz mi kaynak aradığınıza göre değişecektir. Lisans ücretleri sorun olmayacaksa EmguCV çok iyi bir seçim olacaktır fakat ücretsiz bir alternatif arıyorsanız güncel bir wrapper seçmelisiniz aksi taktirde elinizdeki wrapper OpenCV’nin eski versiyonlarını referans alarak geliştirildiği için bazı problemlerin çözümünde eski algoritmaları kullanmak zorunda kalabilirsiniz. Eski veya bir çok bug bulunan algoritmalar performansı doğrudan etkileyen faktörlerdir. Opencvsharp en güncel sürüm olan OpenCV 3.1 sürümünü desteklemektedir. Mono, .NET Framework 2.0 ve sonrası versiyonları desteklemesi sayesinde diğer platformlar veya eski projeler için rahatlıkla kullanılabilir. İyi hazırlanmış wiki’si ve geniş örnek kütüphanesi ile aradığınız bir çok şeyi kolayca bulabilirsiniz. Açık kaynak kod olarak BSD lisansı altında ücretsiz olarak geliştirilmektedir. OpenCVDotNet ve SharperCV güncel OpenCV versiyonlarını takip etmemekle birlikte uzun zamandır güncelleme gelmeyen ve geliştirilmesi neredeyse durdu denilebilecek kütüphanelerdir. Fakat fonksiyonlara getirdikleri farklı yaklaşımlarla temel görüntü işleme işleri için kullanılabilirler.
Yararlı Bağlantılar
EmguCV
WebSite: http://www.emgu.com/wiki/index.php
Wiki: http://www.emgu.com/wiki/index.php/Main_Page
Sourceforge: https://sourceforge.net/projects/emgucv/
Opencvsharp
GitHub: https://github.com/shimat/opencvsharp
NuGet: https://www.nuget.org/packages/OpenCvSharp3-AnyCPU/
Dokümantasyon: https://github.com/shimat/opencvsharp
Wiki: https://github.com/shimat/opencvsharp/wiki
SharperCV