[ad_1]
私は古くてめったに基本的な男ではありません。 私は 1970 年に大学で Basic の 1 学期のコースを受講し、1992 年に Quick Basic に移行し、次に Visual Basic に移行しました。アイデアが思いついたときの趣味として、これを行っています。
短いレーザー「ショット」をキャプチャし、「ターゲット」ビットマップに穴を描くレーザー射撃範囲をプログラムしようとしています。 ウェブカメラのビデオ ストリームで検出するのは、簡単な方法のように思えます。 Visual Basic Express 2010 を使用して、USB カメラからビデオをキャプチャし、それを Aforge VideoSourcePlayer ボックスに表示する方法をついに独学しました。 ただし、そうするのは些細なことであるというすべての主張にもかかわらず、フィルターを使用するためにこのストリームからビットマップ フレームを抽出することはできません。 先週、ドキュメントを読み、サンプルを確認し、C# コードを VB.NET に変換しましたが、プログラムにビデオのビットマップ フレームを認識させてキャプチャさせることができません。 以下に操作コードを含めます。必要なのは、このビデオから一連のビットマップ フレームを取得する行だけで、ブロブの識別を行うことができます。
フォームには VideoSourcePlayer ボックスと PictureBox があります。
'create first video source Dim cam As New VideoCaptureDevice(videoDevices(cboCameras.SelectedIndex) .MonikerString) cam.DesiredFrameRate = 10 fMain.VideoSourcePlayer1.VideoSource = cam fMain.VideoSourcePlayer1.Start() 'when each frame is received, f(cam_newFrame) is called 'cam.NewFrame += New NewFrameEventHandler(AddressOf cam_NewFrame) - This just gives me errors 'Dim img As Bitmap = DirectCast(cam.NewFrame.Clone(), Bitmap) - Displays a 'Blank' picture Dim img As Bitmap = Bitmap.FromFile("C:\tgtMan-with holes.bmp") - This works, but it's not the video fMain.PictureBox1.Image = img
解決策 1
こんにちは。
あなたが話しているこのフォージ ビデオサースプレーヤー ボックスを使用する機会はありませんでしたが、あなたが言うように、フレームが受信されたときに関数 cam_newFrame が呼び出された場合、この関数にはパラメーターとして渡されたオブジェクトが必要です。 このオブジェクトは探している画像である必要があり、それを画像として保存してからフィルターを実行できるはずです。 この関数のコードを教えていただければ、もっとお手伝いできるかもしれません。
解決策 2
返信ありがとうございます。
NewFrame イベントを「キャプチャ」できないようです。 私はもう試した:
「関数 cam_newFrame (ByVal 送信者としてオブジェクト、ByVal eventArgs として AForge.Video.NewFrameEventArgs) は cam.NewFrame を処理します」
これにより、警告が表示され、関数コード (テスト用の単純な TextBox エントリ) が実行されません。
「警告 – 関数 ‘cam_newFrame’ は、すべてのコード パスで値を返すわけではありません。結果が使用されると、実行時に null 参照例外が発生する可能性があります。」
以下の Sub を試しましたが、PictureBox に何も表示されません
“Private Sub cam_NewFrame(ByVal sender As Object, ByVal eventArgs As NewFrameEventArgs)
PictureBox1.Image = DirectCast(eventArgs.Frame.Clone(), ビットマップ)
ご指導ありがとうございます。
解決策 4
Bitmap bitmap = (Bitmap)videoSourcePlayer1.GetCurrentVideoFrame().Clone(); pictureBox1.Image = bitmap;
[ad_2]
コメント