OPenCV- EmguCV ve vb.net

Başlatan muhittin_kaplan, 24 Ekim 2013, 14:10:08

muhittin_kaplan

vb.net 2010 ile opencv nin .net ortamında kullanılması için türetilmiş emgucv http://www.emgu.com/wiki/index.php/Main_Page yi bilgisayarıma yükledim. örneklerden yola çıkarak fotolarla felan çalıştım.
ama ilkkez webcam den görüntü almaya çalıştığımda hatalarla karşılaştım.

amacım şunu yapmak.

OpenCV tutorial 6: Emgu CV with Visual Basic

Herşeyi yapmama rağmen (toolları eklemek, kütüphaneleri eklemek felan) devamlı şu hatayı alıyorum

önce "The type initializer for 'Emgu.CV.CvInvoke' threw an exception." (bunu aradım genelde x64 x86 probleminden kaynaklandığı anlatılmış.)
conrasında "Object reference not set to an instance of an object." new ile oluşturmamışsın diyor. (imgOriginal = capWebcam.QueryFrame() satırında)

leblebitozu

Hata veren satırdan önce bir yerde yeni obje oluşturman gerekir;

capWebcam= new Capture()

muhittin_kaplan

#2
halletim hocam.
problem kodlarda felan değil. eklentileri "copy always" dememden kaynaklanıyormuş.
http://file.emgu.com/wiki/index.php/Download_And_Installation
"For each of the included Dlls, left click on it, find the "Copy to Output Directory" option and select "Copy if newer"


emgucv vb.net


mesaj birleştirme:: 24 Ekim 2013, 17:25:00

farkettim saç kalmamış.

kantirici

muhittin hocam "copy always" kaldırdınızmı ? yaptınızmı? Aynı adamın c# için olan videosunda adam "copy always" seçiyor. Bende sizden görünce bi deneme yapayım dedim ve aynı hatayı aldım :)

subram

yetişemiyoruz hızına abi. Toplantıda anlatılacak güzel konular var anlaşılan ;)
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

muhittin_kaplan

#5
face emguvb.net

mesaj birleştirme:: 25 Ekim 2013, 00:59:52

pek anlamıyorum bu işlerden ama, emgu nun kütüphanesi güzel yazılmış. kopyala yapıştır iyi gidiyor şimdilik.


mesaj birleştirme:: 25 Ekim 2013, 01:01:42

Alıntı yapılan: kantirici - 24 Ekim 2013, 20:12:27
muhittin hocam "copy always" kaldırdınızmı ? yaptınızmı? Aynı adamın c# için olan videosunda adam "copy always" seçiyor. Bende sizden görünce bi deneme yapayım dedim ve aynı hatayı aldım :)
Hocam
heryerde x64 yapıyoruz.
sonrasında referansları ekliyoruz
ve diğer dosyaları ekliyoruz. bu dosyaları copy if newer yapıyoruz. hata vermiyor.

SERRO EFE

@muhittin hocam ilk videonun proje dosyalarını paylaşmanız mümkünmü. Hazıra konalım :)

muhittin_kaplan

#7
hemen.

mesaj birleştirme:: 25 Ekim 2013, 02:09:31

hocam yaklaşık 1 saat dedi. kodları versem.

mesaj birleştirme:: 25 Ekim 2013, 02:11:11

Imports Emgu.CV
Imports Emgu.CV.CvEnum
Imports Emgu.CV.Structure
Imports Emgu.CV.UI
Imports System.Drawing



Public Class Form1

    Dim capWebcam As Emgu.CV.Capture

    Dim blnCapturingInProgress As Boolean = False
    Dim imgOriginal As Emgu.CV.Image(Of Bgr, Byte)
    Dim imProcessed As Image(Of Gray, Byte)
    Dim imgGray As Image(Of Gray, Byte)

    Sub New()
        InitializeComponent()
    End Sub

    Sub ProcessFrameAndUpdateGUI(ByVal sender As Object, ByVal arg As EventArgs)

        Dim imgOriginal As Image(Of Bgr, Byte) = capWebcam.QueryFrame()



        If (imgOriginal Is Nothing) Then
            Return
        End If

 
        imProcessed = imgOriginal.InRange(New Bgr(0, 0, 175), New Bgr(100, 100, 255))
        imProcessed = imProcessed.SmoothGaussian(9)

        Dim circles As CircleF() = imProcessed.HoughCircles(New Gray(50), New Gray(50), 2, imProcessed.Height / 4, 10, 400)(0)

        For Each circlef In circles
            If txtXYradius.text <> "" Then
                txtXYradius.AppendText(Environment.NewLine)
            End If


            txtXYradius.AppendText("ball Pasition x" + circlef.Center.X.ToString.PadLeft(4) + " Y position" + circlef.Center.Y.ToString.PadLeft(4) + ",radius " + circlef.Radius.ToString.PadLeft(4))
            txtXYradius.ScrollToCaret()


            CvInvoke.cvCircle(imgOriginal, New Point(CInt(circlef.Center.X), CInt(circlef.Center.Y)), 3, New MCvScalar(255, 255, 255), -1, LINE_TYPE.CV_AA, 0)

            imgOriginal.Draw(circlef, New Bgr(Color.Blue), 2)

        Next

        ibOriginal.Image = imgOriginal
        ibProcessed.Image = imProcessed

        '----------------------------------------------------------------------


    End Sub


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
            capWebcam = New Capture()


        Catch ex As Exception
            txtXYradius.Text = ex.Message
            Return
        End Try
        AddHandler Application.Idle, New EventHandler(AddressOf Me.ProcessFrameAndUpdateGUI)

        blnCapturingInProgress = True


    End Sub

    Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
        If (Not capWebcam Is Nothing) Then
            capWebcam.Dispose()
        End If
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If (blnCapturingInProgress = True) Then
            RemoveHandler Application.Idle, New EventHandler(AddressOf Me.ProcessFrameAndUpdateGUI)
            blnCapturingInProgress = False
            Button1.Enabled = True
        Else
            AddHandler Application.Idle, New EventHandler(AddressOf Me.ProcessFrameAndUpdateGUI)
            blnCapturingInProgress = True
            Button1.Enabled = False

        End If
    End Sub
End Class


mesaj birleştirme:: 25 Ekim 2013, 02:12:19

formun üzerinde iki emgucv.image bir buton ve bir text var.
yanlış olan yerde buradan devam eder hallederiz.

SERRO EFE

#8
Kodlar için teşekkür ederim Hocam. Bende imagebox ve histogrambox çıkmıyor. Nasıl eklediniz?
Edit : Hallettim hocam ui.dll dosyasını toolboxa ekliyormuşuz

atioky_216

2010 da az ugrasmamıştım openCV ile :) hocam bu VB de performans nasil ? ben C ile çalısıyordum, çok hızlı meretti... Bu arada C# için yapılan kütüphane o aralar çok fonksiyon içermiyodu egmuCV de nasıl?

muhittin_kaplan

Hocam vb.net kullaniyorum. Emgu, opencv ile birlikte kullaniliyor. Perf. Gayet iyi.

muhittin_kaplan

Bu Nalet le :D
Bir Kavanozun İçindeki lekeyi tespit edebilirmiyiz ?

MrDarK

Hocam matlab kullansan daha iyi değil mi ? İnceledim kolay gibi görünüyor bende benzeri bir projede kullanabilirim belki emgucv'yi ama şöyle bir durum var bu kadar işlem yaptıktan sonra matlab ile yaparım daha iyi gibi geliyor bana :) Çünkü ondada böyle formüller söz konusu.

Üniversitede yaptığımız bir uygulamada köprünün kollarında bulunan açıları hesap etmiştik :D

Baya fantastik şeyler yapıyorduk o yüzden kavanoz üzerindeki lekeleri bulmakta söz konusu olmaması gerekiyor.
Picproje Eğitim Gönüllüleri ~ MrDarK

swearer

Alıntı yapılan: MrDarK - 28 Ekim 2013, 15:07:30
Hocam matlab kullansan daha iyi değil mi ? İnceledim kolay gibi görünüyor bende benzeri bir projede kullanabilirim belki emgucv'yi ama şöyle bir durum var bu kadar işlem yaptıktan sonra matlab ile yaparım daha iyi gibi geliyor bana :) Çünkü ondada böyle formüller söz konusu.

Üniversitede yaptığımız bir uygulamada köprünün kollarında bulunan açıları hesap etmiştik :D

Baya fantastik şeyler yapıyorduk o yüzden kavanoz üzerindeki lekeleri bulmakta söz konusu olmaması gerekiyor.

Bu köprü olayını biraz daha açabilir miyiz ? MATLAB yada C ile yaptıysanız örnek dosyaları paylaşabilirmisiniz ?

muhittin_kaplan

matlap, sevmiyorum kod yazmayı çile çekmeyi seviyorum.
Sanki EMgu İle çözeriz gibi.