openCVSharp4が結構ネットに上がっているがC#やpyhtonばかりでvb.netが見あたらないので
作ってみた
動作
1.スタートでカメラから画像を60フレーム程度で取り込み表示
2.シャッターで表示中の画像を一時保存
3.保存でダイアログを開いて指定のフォルダに保存
form1
form上に ボタンを4つ combboxを一つ picutureboxを二つ
timer1を一つ (本来はroot処理でwaitkeyで止まるはずだがなぜかvbでは止まらない)
ツール>>NetGetパッケージマネージャー>>ソルーションから
下記の三つをインストール
OpenCVSharp4
OpenCVSharp4 Extensions
OpenCVSharp4 RunTime.win
これに必要な他の、モジュールも取り込まれる
なおNetFrameWorkのバージョンで動作しない事があるので注意
まずはVideoCaptureの定義 captureならエラーになるので注意
Private capture1 As VideoCapture = Nothing
Private flame As Mat = Nothing
loadでpicturebox1,picturebox2の初期化と接続カメラの定義
複数ある場合はこの方法でも可能
‘複数のカメラの検索
‘For i = 0 To 3
‘ capture = New VideoCapture()
‘ capture.Open(i)
‘ If capture.IsOpened() = False Then
‘ Else
‘ ComboBox1.Items.Add(i)
‘ End If
‘Next
起動は
capture1 = New VideoCapture()
capture1.Open(CInt(Mid(ComboBox1.Text, 1, 1)))
If capture1.IsOpened() = False Then
MsgBox(“capture initialization failed”, vbInformation)
End If
PictureBox1.Visible = True
PictureBox2.Visible = False
Timer1.Interval = 33 ’ 60フレーム
Timer1.Start()
本当はループでカメラからの画像を取り込みたいけど
flame = New Mat()
capture1.Read(flame)
If flame.Empty() Then
Exit Sub
End If
If flame.Size().Width > 0 Then
‘PictureBoxに表示 MatをBitMapに変換
PictureBox1.Image = BitmapConverter.ToBitmap(flame)
End If
シャッタを押せばタイマーを停止して画像と取り込み
If flame Is Nothing Then
Return
End If
PictureBox1.Visible = False
PictureBox2.Visible = True
‘//PictureBoxに表示 MatをBitMapに変換
PictureBox2.Image = BitmapConverter.ToBitmap(flame)
Timer1.Stop()
ダイアログを開いてファイル名で保存
終了は
Timer1.Stop()
If capture1 IsNot Nothing Then
capture1.Dispose()
End If
PictureBox1.Image = Nothing
PictureBox2.Image = Nothing
m_END = True
Me.Close()
これで完了、