質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.59%

カメラ2台を用いて距離計測

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,229

leliel1193

score 9

 前提・実現したいこと

カメラを2つ用いてある対象物との距離を測定したいです。
Labviewを用いて作っていますが、追加のモジュールを用意していないのでTCP通信、あるいはほかの方法でLabview側に画像を送信してLabview内で距離測定の処理を行いたいです。
また、Labview以外(C++,C#等)でカメラを二台用いて距離計測出来るのであればそちらのほうもご教授お願いしたいです。

 発生している問題・エラーメッセージ

VBとLabview間で、文字列の送受信を行うプログラムは出来たのですが、画像をLabview側に送る方法が分からないです。
また、Labviewへ受信した後、どのように処理をすれば距離計測ができるのか調べたのですがいまいち理解できませんでした。

 該当のソースコード

送信側プログラム

Public Class Form1

    Private ns As System.Net.Sockets.NetworkStream


    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

        Try
            Dim tcp As New System.Net.Sockets.TcpClient("localhost", 6200)
            ns = TCP.GetStream()
            ns.ReadTimeout = 10000
            ns.WriteTimeout = 10000
            MessageBox.Show("接続成功")
        Catch ex As Exception
            MessageBox.Show("接続失敗")
        End Try

    End Sub


    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click

        'サーバーにデータを送信する
        '文字列をByte型配列に変換

        Dim enc As System.Text.Encoding = System.Text.Encoding.UTF8
        Dim sendBytes As Byte() = enc.GetBytes(TextBox1.Text & vbCrLf)
        'データを送信する
        ns.Write(sendBytes, 0, sendBytes.Length)

        'サーバーから送られたデータを受信する
        Dim ms As New System.IO.MemoryStream()
        Dim resBytes As Byte() = New Byte(255) {}
        Dim resSize As Integer = 0
        Do
            'データの一部を受信する
            resSize = ns.Read(resBytes, 0, resBytes.Length)
            'Readが0を返した時はサーバーが切断したと判断
            If resSize = 0 Then
                Console.WriteLine("サーバーが切断しました。")
                Exit Do
            End If
            '受信したデータを蓄積する
            ms.Write(resBytes, 0, resSize)
            'まだ読み取れるデータがあるか、データの最後が\nでない時は、
            ' 受信を続ける
        Loop While ns.DataAvailable OrElse _
            resBytes(resSize - 1) <> AscW(ControlChars.Lf)
        '受信したデータを文字列に変換
        Dim resMsg As String = enc.GetString(ms.GetBuffer(), 0, CInt(ms.Length))
        ms.Close()
        '末尾の\nを削除
        resMsg = resMsg.TrimEnd(ControlChars.Lf)

        TextBox2.Text = resMsg

        '閉じる
        'ns.Close()

    End Sub

    Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

    End Sub


    Private Sub Form1_MaximumSizeChanged(sender As Object, e As System.EventArgs) Handles Me.MaximumSizeChanged

    End Sub
End Class

 補足情報(FW/ツールのバージョンなど)

![Labview側(受信側)ブロックダイアグラム(Labview(受信側)のブロックダイアグラム.png)

プログラミング初心者のため、読みづらいコード、意味不明なところが多々ございますが、ご教授のほうよろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

https://qiita.com/ringo156/items/6c58ed5fae9e56dafefb

カメラ二台を利用する場合、三角測量、結局幾何学計算になりますが、それが必要です。
また、ある物体が各カメラでどの位置座標にあるのかを特定するために、
画像認識をする必要があります。

これらをlabviewでどのように実現するのかはわかりません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/12 18:04

    映像だけで、なんて距離がわかるのでしょうか?距離を測るのなら、物体になにか物質を当てて、それが帰ってきた時間を計るものだと思うのですが・・そういった機能がカメラにないと距離を測ることはできないと思いますが?

    キャンセル

  • 2018/11/13 10:14

    仰っているのはKinectなど赤外線センサーを搭載したカメラのことかと思いますが、そのような機材を利用すればもちろん手軽に精度よく距離を測れますね。あるいは、レーザーを利用した高精度な専用デバイスもあります。しかし精度は劣るものの、同じものを撮影した2枚の画像から距離を測定することは可能です。

    キャンセル

  • 2018/11/13 23:30

    Labview自体の仕様については、それを利用しているまたは、メーカーに問合せるしかないと思います。ここで、聞いても答えられる人はいないと思います。ただ、どのうような情報がap側で取得できて、それを自力で計算するのであれば、その式を加減乗算の形で表現できればどの言語でも対応できると思います。どの言語も、加減乗算は用意されてます。もし、関数のようなものが用意されているとしたら、Labviewのメーカーからそのライブラリーが用意されているかも知れません。その場合には対応言語
    とかあるかもしれないのでその辺も含めて、メーカーへご質問されては如何でしょうか?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る