#Region Project Attributes
#MainFormWidth: 1500
#MainFormHeight: 1000
#End Region
'===========================================================================================
' REQUIRED for jOpenCV.
'===========================================================================================
' This will copy the required DLLs to App dir. Change accordingly to the location of the DLLs folder.
' Alternatively, you can also manually place the DLLS there, or in a folder that is in the java classpath.
#CustomBuildAction: folders ready, %WINDIR%\System32\Robocopy.exe,"..\..\jOpenCVDlls" "."
'
' If you want to distribute it as a standalone package, copy your DLLs to the projects root folder
' DLL names can vary in other jOpenCV versions so be sure to modify accordingly.
#CustomBuildAction: After Packager, %WINDIR%\System32\robocopy.exe, ..\ temp\build\bin\ b4jcv_344_01.dll
#CustomBuildAction: After Packager, %WINDIR%\System32\robocopy.exe, ..\ temp\build\bin\ opencv_ffmpeg344_64.dll
#CustomBuildAction: After Packager, %WINDIR%\System32\robocopy.exe, ..\ temp\build\bin\ tbb12.dll
'
'===========================================================================================
Sub Process_Globals
Private fx As JFX
Private MainForm As Form
Private xui As XUI
Private APPTITLE As String = "[B4J] jOpenCV - Sample 01: Image manipulations"
Private iv1, iv2 ,iv3 ,iv4,iv5,iv6 As ImageView
Private CurImageView As String = "NONE"
Private doProcessStream1, isProcessingStream1 As Boolean
Private doProcessStream2, isProcessingStream2 As Boolean
'Private srcImg As Image
'Dim morphElement As Object ' Will create it once and use it in dilate/erode operations
Private mCore As OCVCore ' Declare it before any instantiable jOpenCV class!
Private OCV As OCVHelper ' Helper class for in-place constructors
Private mType As OCVCvType ' Contains some defined constant types for image processing
Private mImgProc As OCVImgproc
Private btnImage, btnVideo, btnCam, btnStream As Button
Private cannySLider As Slider
Private ToggleROIswap, ToggleFlip, ToggleBlur, ToggleCanny, ToggleDilate, ToggleErode, ToggleFFT2D As ToggleButton
Private cannyThreshold As Double = 30
Private doProcessStream, isProcessingStream As Boolean
Private srcImg As Image
Dim morphElement As Object ' Will create it once and use it in dilate/erode operations
Private Button1 As Button
Private Button2 As Button
Private BLeft As Button
Private BRight As Button
Private BDown As Button
Private BUp As Button
Private SleepRate As TextField
Private GrabRate As TextField
Private SleepRateInt As Int = 1000
Private GrabRateInt As Int = 15
Private ExitProgram As Button
Dim Thread1 As Thread
Dim Thread2 As Thread
Dim Thread3 As Thread
Dim Thread4 As Thread
Dim Thread5 As Thread
Dim Thread6 As Thread
Dim Lock1 As Lock
Dim Lock2 As Lock
Dim Lock3 As Lock
Dim Lock4 As Lock
Dim Lock5 As Lock
Dim Lock6 As Lock
Dim vcMat1 As OCVMat
Dim vcMat2 As OCVMat
Dim vcMat3 As OCVMat
Dim vcMat4 As OCVMat
Dim vcMat5 As OCVMat
Dim vcMat6 As OCVMat
End Sub
Sub AppStart (Form1 As Form, Args() As String)
MainForm = Form1
MainForm.RootPane.LoadLayout("MainPage")
MainForm.Show
MainForm.Title = APPTITLE
'ProcessStream1
'ProcessStream2
'ProcessStream3
'ProcessStream4
'ProcessStream5
'ProcessStream6
Dim MyArgs(0) As Object
Thread1.Initialise("thread1")
Lock1.Initialize(True)
Thread1.Name = "B4A Thread 1"
Thread1.Start(Null,"ThreadSub1",MyArgs)
Thread2.Initialise("thread2")
Lock2.Initialize(True)
Thread2.Name = "B4A Thread 2"
Thread2.Start(Null,"ThreadSub2",MyArgs)
Thread3.Initialise("thread3")
Lock3.Initialize(True)
Thread3.Name = "B4A Thread 3"
Thread3.Start(Null,"ThreadSub3",MyArgs)
Thread4.Initialise("thread4")
Lock4.Initialize(True)
Thread4.Name = "B4A Thread 4"
Thread4.Start(Null,"ThreadSub4",MyArgs)
Thread5.Initialise("thread5")
Lock5.Initialize(True)
Thread5.Name = "B4A Thread 5"
Thread5.Start(Null,"ThreadSub5",MyArgs)
Thread6.Initialise("thread6")
Lock6.Initialize(True)
Thread6.Name = "B4A Thread 6"
Thread6.Start(Null,"ThreadSub6",MyArgs)
End Sub
'________________________________________________________________
Sub ThreadSub1
Dim x As Int
Dim mVideoCapture1 As OCVVideoCapture
Dim streamPath1 As String = "rtsp://admin:admin@192.168.168.132:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif"
mVideoCapture1.Initialize1(streamPath1)
Dim Params(0) As Object
Dim ok As Boolean = False
Dim FOREVER As Boolean = True
do while FOREVER
x= 0
Do Until x = GrabRateInt
mVideoCapture1.grab
x=x+1
Loop
ok = False
Do Until ok
mVideoCapture1.retrieve1(vcMat1)
'iv1.SetImage( Utils.MatToBitmap(vcMat1) )
'Sleep(SleepRateInt)
Thread1.RunOnGuiThread("Setiv1",Params)
ok = Lock1.WaitFor(1000)
Loop
Loop
End Sub
Sub Setiv1
iv1.SetImage(Utils.MatToBitmap(vcMat1) )
Lock1.Unlock
End Sub
Sub Thread1_Ended(fail As Boolean, error As String) 'An error or Exception has occurred in the Thread
'Msgbox(error, "Thread1 Ended")
xui.MsgboxAsync(error,"ERROR")
End Sub
'____________________________________________________________________________
'________________________________________________________________
Sub ThreadSub2
Dim x As Int
Dim mVideoCapture2 As OCVVideoCapture
Dim streamPath2 As String = "rtsp://admin:admin@192.168.168.133:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif"
mVideoCapture2.Initialize1(streamPath2)
Dim Params(0) As Object
Dim ok As Boolean = False
Dim FOREVER As Boolean = True
do while FOREVER
x= 0
Do Until x = GrabRateInt
mVideoCapture2.grab
x=x+1
Loop
ok = False
Do Until ok
mVideoCapture2.retrieve1(vcMat2)
'iv1.SetImage( Utils.MatToBitmap(vcMat1) )
'Sleep(SleepRateInt)
Thread2.RunOnGuiThread("Setiv2",Params)
ok = Lock2.WaitFor(1000)
Loop
Loop
End Sub
Sub Setiv2
iv2.SetImage(Utils.MatToBitmap(vcMat2) )
Lock2.Unlock
End Sub
Sub Thread2_Ended(fail As Boolean, error As String) 'An error or Exception has occurred in the Thread
xui.MsgboxAsync(error,"ERROR on thread 2")
End Sub
'____________________________________________________________________________
'________________________________________________________________
Sub ThreadSub3
Dim x As Int
Dim mVideoCapture3 As OCVVideoCapture
Dim streamPath3 As String = "rtsp://admin:admin@192.168.168.130:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif"
mVideoCapture3.Initialize1(streamPath3)
Dim Params(0) As Object
Dim ok As Boolean = False
Dim FOREVER As Boolean = True
do while FOREVER
x= 0
Do Until x = GrabRateInt
mVideoCapture3.grab
x=x+1
Loop
ok = False
Do Until ok
mVideoCapture3.retrieve1(vcMat3)
'iv1.SetImage( Utils.MatToBitmap(vcMat1) )
'Sleep(SleepRateInt)
Thread3.RunOnGuiThread("Setiv3",Params)
ok = Lock3.WaitFor(1000)
Loop
Loop
End Sub
Sub Setiv3
iv3.SetImage(Utils.MatToBitmap(vcMat3) )
Lock3.Unlock
End Sub
Sub Thread3_Ended(fail As Boolean, error As String) 'An error or Exception has occurred in the Thread
'Msgbox(error, "Thread1 Ended")
xui.MsgboxAsync(error,"ERROR on thread 3")
End Sub
'____________________________________________________________________________
'________________________________________________________________
Sub ThreadSub4
Dim x As Int
Dim mVideoCapture4 As OCVVideoCapture
Dim streamPath4 As String = "rtsp://admin:admin@192.168.168.134:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif"
mVideoCapture4.Initialize1(streamPath4)
Dim Params(0) As Object
Dim ok As Boolean = False
Dim FOREVER As Boolean = True
do while FOREVER
x= 0
Do Until x = GrabRateInt
mVideoCapture4.grab
x=x+1
Loop
ok = False
Do Until ok
mVideoCapture4.retrieve1(vcMat4)
'iv1.SetImage( Utils.MatToBitmap(vcMat1) )
'Sleep(SleepRateInt)
Thread4.RunOnGuiThread("Setiv4",Params)
ok = Lock4.WaitFor(1000)
Loop
Loop
End Sub
Sub Setiv4
iv4.SetImage(Utils.MatToBitmap(vcMat4) )
Lock4.Unlock
End Sub
Sub Thread4_Ended(fail As Boolean, error As String) 'An error or Exception has occurred in the Thread
'Msgbox(error, "Thread1 Ended")
xui.MsgboxAsync(error,"ERROR on thread 4")
End Sub
'____________________________________________________________________________
'________________________________________________________________
Sub ThreadSub5
Dim x As Int
Dim mVideoCapture5 As OCVVideoCapture
Dim streamPath5 As String = "rtsp://admin:admin@192.168.168.135:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif"
mVideoCapture5.Initialize1(streamPath5)
Dim Params(0) As Object
Dim ok As Boolean = False
Dim FOREVER As Boolean = True
do while FOREVER
x= 0
Do Until x = GrabRateInt
mVideoCapture5.grab
x=x+1
Loop
ok = False
Do Until ok
mVideoCapture5.retrieve1(vcMat5)
'iv1.SetImage( Utils.MatToBitmap(vcMat1) )
'Sleep(SleepRateInt)
Thread5.RunOnGuiThread("Setiv5",Params)
ok = Lock5.WaitFor(200)
Loop
Loop
End Sub
Sub Setiv5
iv5.SetImage(Utils.MatToBitmap(vcMat5) )
Lock5.Unlock
End Sub
Sub Thread5_Ended(fail As Boolean, error As String) 'An error or Exception has occurred in the Thread
'Msgbox(error, "Thread1 Ended")
xui.MsgboxAsync(error,"ERROR on thread 5")
End Sub
'____________________________________________________________________________
'________________________________________________________________
Sub ThreadSub6
Dim x As Int
Dim mVideoCapture6 As OCVVideoCapture
Dim streamPath6 As String = "rtsp://admin:admin@192.168.168.136:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif"
mVideoCapture6.Initialize1(streamPath6)
Dim Params(0) As Object
Dim ok As Boolean = False
Dim FOREVER As Boolean = True
do while FOREVER
x= 0
Do Until x = GrabRateInt
mVideoCapture6.grab
x=x+1
Loop
ok = False
Do Until ok
mVideoCapture6.retrieve1(vcMat6)
'iv1.SetImage( Utils.MatToBitmap(vcMat1) )
'Sleep(SleepRateInt)
Thread6.RunOnGuiThread("Setiv6",Params)
ok = Lock6.WaitFor(1000)
Loop
Loop
End Sub
Sub Setiv6
iv6.SetImage(Utils.MatToBitmap(vcMat6) )
Lock6.Unlock
End Sub
Sub Thread6_Ended(fail As Boolean, error As String) 'An error or Exception has occurred in the Thread
'Msgbox(error, "Thread1 Ended")
xui.MsgboxAsync(error,"ERROR on thread 6")
End Sub
'____________________________________________________________________________
Sub ProcessStream1
Dim x As Int
Dim vcMat1 As OCVMat
Dim mVideoCapture1 As OCVVideoCapture
Dim streamPath1 As String = "rtsp://admin:admin@192.168.168.132:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif"
mVideoCapture1.Initialize1(streamPath1)
Dim FOREVER As Boolean = True
do while FOREVER
x= 0
Do Until x = GrabRateInt
mVideoCapture1.grab
x=x+1
Loop
mVideoCapture1.retrieve1(vcMat1)
iv1.SetImage( Utils.MatToBitmap(vcMat1) )
Sleep(SleepRateInt)
Loop
End Sub
Sub ProcessStream2
Dim x As Int
Dim vcMat2 As OCVMat
Dim mVideoCapture2 As OCVVideoCapture
Dim streamPath2 As String = "rtsp://admin:admin@192.168.168.133:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif"
mVideoCapture2.Initialize1(streamPath2)
Dim FOREVER As Boolean = True
do while FOREVER
x=0
Do Until x = GrabRateInt
mVideoCapture2.grab
x=x+1
Loop
mVideoCapture2.grab
mVideoCapture2.retrieve1(vcMat2)
iv2.SetImage( Utils.MatToBitmap(vcMat2) )
Sleep(SleepRateInt)
Loop
End Sub
Sub ProcessStream3
Dim x As Int
Dim vcMat3 As OCVMat
Dim mVideoCapture3 As OCVVideoCapture
Dim streamPath3 As String = "rtsp://admin:admin@192.168.168.130:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif"
mVideoCapture3.Initialize1(streamPath3)
Dim FOREVER As Boolean = True
do while FOREVER
x=0
Do Until x = GrabRateInt
mVideoCapture3.grab
x=x+1
Loop
mVideoCapture3.grab
mVideoCapture3.retrieve1(vcMat3)
iv3.SetImage( Utils.MatToBitmap(vcMat3) )
Sleep(SleepRateInt)
Loop
End Sub
Sub ProcessStream4
Dim x As Int
Dim vcMat4 As OCVMat
Dim mVideoCapture4 As OCVVideoCapture
Dim streamPath4 As String = "rtsp://admin:admin@192.168.168.134:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif"
mVideoCapture4.Initialize1(streamPath4)
Dim FOREVER As Boolean = True
do while FOREVER
x=0
Do Until x = GrabRateInt
mVideoCapture4.grab
x=x+1
Loop
mVideoCapture4.grab
mVideoCapture4.retrieve1(vcMat4)
iv4.SetImage( Utils.MatToBitmap(vcMat4) )
Sleep(SleepRateInt)
Loop
End Sub
Sub ProcessStream5
Dim x As Int
Dim vcMat5 As OCVMat
Dim mVideoCapture5 As OCVVideoCapture
Dim streamPath5 As String = "rtsp://admin:admin@192.168.168.135:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif"
mVideoCapture5.Initialize1(streamPath5)
Dim FOREVER As Boolean = True
do while FOREVER
x=0
Do Until x = GrabRateInt
mVideoCapture5.grab
x=x+1
Loop
mVideoCapture5.grab
mVideoCapture5.retrieve1(vcMat5)
iv5.SetImage( Utils.MatToBitmap(vcMat5) )
Sleep(SleepRateInt)
Loop
End Sub
Sub ProcessStream6
Dim x As Int
Dim vcMat6 As OCVMat
Dim mVideoCapture6 As OCVVideoCapture
Dim streamPath6 As String = "rtsp://admin:admin@192.168.168.136:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif"
mVideoCapture6.Initialize1(streamPath6)
Dim FOREVER As Boolean = True
do while FOREVER
x=0
Do Until x = GrabRateInt
mVideoCapture6.grab
x=x+1
Loop
mVideoCapture6.grab
mVideoCapture6.retrieve1(vcMat6)
iv6.SetImage( Utils.MatToBitmap(vcMat6) )
Sleep(SleepRateInt)
Loop
End Sub
Private Sub Button1_Click
'make image bigger
If CurImageView = "NONE" Then
Return
End If
Dim H As Double
Dim W As Double
If CurImageView = "iv1" Then
H = iv1.Height + 50
W = iv1.Width + 50
iv1.setsize(W,H)
End If
If CurImageView = "iv2" Then
H = iv2.Height + 50
W = iv2.Width + 50
iv2.setsize(W,H)
End If
If CurImageView = "iv3" Then
H = iv3.Height + 50
W = iv3.Width + 50
iv3.setsize(W,H)
End If
If CurImageView = "iv4" Then
H = iv4.Height + 50
W = iv4.Width + 50
iv4.setsize(W,H)
End If
If CurImageView = "iv5" Then
H = iv5.Height + 50
W = iv5.Width + 50
iv5.setsize(W,H)
End If
If CurImageView = "iv5" Then
H = iv5.Height + 50
W = iv5.Width + 50
iv5.setsize(W,H)
End If
If CurImageView = "iv6" Then
H = iv6.Height + 50
W = iv6.Width + 50
iv6.setsize(W,H)
End If
End Sub
Private Sub Button2_Click
'make image smaller
If CurImageView = "NONE" Then
Return
End If
Dim H As Double
Dim W As Double
If CurImageView = "iv1" Then
H = iv1.Height - 50
W = iv1.Width - 50
iv1.setsize(W,H)
End If
If CurImageView = "iv2" Then
H = iv2.Height - 50
W = iv2.Width - 50
iv2.setsize(W,H)
End If
If CurImageView = "iv3" Then
H = iv3.Height - 50
W = iv3.Width - 50
iv3.setsize(W,H)
End If
If CurImageView = "iv4" Then
H = iv4.Height - 50
W = iv4.Width - 50
iv4.setsize(W,H)
End If
If CurImageView = "iv5" Then
H = iv5.Height - 50
W = iv5.Width - 50
iv5.setsize(W,H)
End If
If CurImageView = "iv5" Then
H = iv5.Height - 50
W = iv5.Width - 50
iv5.setsize(W,H)
End If
If CurImageView = "iv6" Then
H = iv6.Height - 50
W = iv6.Width - 50
iv6.setsize(W,H)
End If
End Sub
Private Sub BLeft_Click
'move image to the left
If CurImageView = "NONE" Then
Return
End If
If CurImageView = "iv1" Then
iv1.Left = iv1.Left -1
Return
End If
If CurImageView = "iv2" Then
iv2.Left = iv2.Left -1
Return
End If
If CurImageView = "iv3" Then
iv3.Left = iv3.Left -1
Return
End If
If CurImageView = "iv4" Then
iv4.Left = iv4.Left -1
Return
End If
If CurImageView = "iv5" Then
iv5.Left = iv5.Left -1
Return
End If
If CurImageView = "iv6" Then
iv6.Left = iv6.Left -1
Return
End If
End Sub
Private Sub BRight_Click
'move image right
If CurImageView = "NONE" Then
Return
End If
If CurImageView = "iv1" Then
iv1.Left = iv1.Left +1
Return
End If
If CurImageView = "iv2" Then
iv2.Left = iv2.Left +1
Return
End If
If CurImageView = "iv3" Then
iv3.Left = iv3.Left +1
Return
End If
If CurImageView = "iv4" Then
iv4.Left = iv4.Left +1
Return
End If
If CurImageView = "iv5" Then
iv5.Left = iv5.Left +1
Return
End If
If CurImageView = "iv6" Then
iv6.Left = iv6.Left +1
Return
End If
End Sub
Private Sub BDown_Click
'move image down
If CurImageView = "NONE" Then
Return
End If
If CurImageView = "iv1" Then
iv1.Top = iv1.Top + 1
Return
End If
If CurImageView = "iv2" Then
iv2.Top = iv2.Top + 1
Return
End If
If CurImageView = "iv3" Then
iv3.Top = iv3.Top + 1
Return
End If
If CurImageView = "iv4" Then
iv4.Top = iv4.Top + 1
Return
End If
If CurImageView = "iv5" Then
iv5.Top = iv5.Top + 1
Return
End If
If CurImageView = "iv6" Then
iv6.Top = iv6.Top + 1
Return
End If
End Sub
Private Sub BUp_Click
'move image up
If CurImageView = "NONE" Then
Return
End If
If CurImageView = "iv1" Then
iv1.Top = iv1.Top - 1
Return
End If
If CurImageView = "iv2" Then
iv2.Top = iv2.Top - 1
Return
End If
If CurImageView = "iv3" Then
iv3.Top = iv3.Top - 1
Return
End If
If CurImageView = "iv4" Then
iv4.Top = iv4.Top - 1
Return
End If
If CurImageView = "iv5" Then
iv5.Top = iv5.Top - 1
Return
End If
If CurImageView = "iv6" Then
iv6.Top = iv6.Top - 1
Return
End If
End Sub
Private Sub iv1_MouseClicked (EventData As MouseEvent)
CurImageView = "iv1"
End Sub
Private Sub iv2_MouseClicked (EventData As MouseEvent)
CurImageView = "iv2"
End Sub
Private Sub iv3_MouseClicked (EventData As MouseEvent)
CurImageView = "iv3"
End Sub
Private Sub iv4_MouseClicked (EventData As MouseEvent)
CurImageView = "iv4"
End Sub
Private Sub iv5_MouseClicked (EventData As MouseEvent)
CurImageView = "iv5"
End Sub
Private Sub iv6_MouseClicked (EventData As MouseEvent)
CurImageView = "iv6"
End Sub
Private Sub SleepRate_TextChanged (Old As String, New As String)
SleepRateInt = New
End Sub
Private Sub GrabRate_TextChanged (Old As String, New As String)
GrabRateInt = New
End Sub
Private Sub ExitProgram_Click
Thread1.Interrupt
Thread2.Interrupt
Thread3.Interrupt
Thread4.Interrupt
Thread5.Interrupt
Thread6.Interrupt
ExitApplication
End Sub