前回の記事でTCP/UDPのデータ転送についてある程度の紹介をし、チャタリングや画像転送の設計を行ったので、ここでは前回のpyqtを組み合わせて最後の改善点を作っていきます。それ。
さらに詳しく知りたい場合は、私の以前のコラムを読んでください
1. ホストコンピュータのページと機能の設計
1. ページデザイン
ページのこの部分は比較的単純です。QT を使用してブロックをドラッグ ダウンし、次に主にいくつかの入力ボックスの定義を定義し、必要な変数を定義します。ここでの変数の定義は次のとおりです。定義することをお勧めします。最初に変数を入力し、
次に変数を変更すると、より便利になりますが、変数が多すぎるため、使用するときに混乱しやすくなります。このようにしてください。
ここのビデオ部分については、ラベルを選択するだけです。ラベル コントロールはテキストを表示するために使用されますが、画像の本質はバイトではないため、ここでテキストをバイトに置き換えるだけで十分です。
2. 関数の定義
これは単なるデモなので、多くの機能を作成する必要はありません、主にビデオの表示、その後の画像のキャプチャと保存の操作。これは、上の図に示されている選択したファイルのボタンです。同時に、いくつかのプロンプト情報の表示を容易にするために、ここに情報出力ボックスを追加するのが最善です。デバッグプロセスの一部なので、要約関数はおそらく次のようになります。
- 画像表示
- 画像保存
- ビデオ録画
ここでは基本的な例なので、プログラム部分は一部だけ移植します、ここではUDP部分のみを移植します、画像送信の3つの方法については以前紹介したので、すべてをここに移植するわけではありません。
2. ホストコンピュータプログラムの設計
ここのコードはそれほど多くなく、最後に100行強しかありません。途中の空行を除いて、いくつかの繰り返しがあります。ファームウェアの有効なコードは50行強しかないので、この部分は実際はとてもシンプルです。
1 つ目は初期化部分です。ここでの初期化部分は、一方ではいくつかの変数の初期化であり、他方ではソケットの初期化です。ここでのソケットの初期化では、IP アドレスとポート番号はそのまま残ります。
ファイルを保存するために選択したフォルダーは次のとおりです。ここではqtの公式機能を使用します
関数のソースコードは次のとおりです。開始パスが事前に入力されています。
self.path = QtWidgets.QFileDialog.getExistingDirectory(None,"选取文件夹","G:/") # 起始路径
その結果、 を押した後にファイル選択ボックスがポップアップ表示されます。
この後、画像のオンオフを行いますが、実はこの部分が最も重要な部分とも言えますので、まずはコードを見てみましょう。
ここでは、入力ミスを防ぐために、大きな問題が起こらないように try を追加します。下の情報出力ボックスは、正しい IP アドレスとポート番号の入力を求めます。ここは非常に重要だと思います。間違い qt プログラムがフラッシュバックしてしまい非常に面倒なので、
タイマーをオンにするとタイマー機能に入り、前回の UDP 送信のデコード関数をタイマーに入れてデコードすることで実現します。ループ更新し、公式関数を使用して画像を塗りつぶします。関数は次のとおりです。
showimage = QtGui.QImage(self.iamge.data, self.iamge.shape[1], self.iamge.shape[0], self.iamge.shape[1] * 3,
QtGui.QImage.Format_RGB888)
実はここで注意すべき点は、BGR画像をRGBに変換しないと、表示上のチャンネルの乱れによる違和感が非常に大きいので、ここではopencvの公式機能を使います。
self.iamge = cv2.cvtColor(self.img, cv2.COLOR_BGR2RGB)
最終的な完全なコードは次のとおりです
以下は写真を保存する部分で、基本的には opencv の公式関数を呼び出します。
最後にビデオを保存します. こちらも以前の公式機能です. 機能は次のとおりです:
self.video_out = cv2.VideoWriter(str(self.path) + '/' + str(self.video_index) + '.avi',
cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), 50, (640, 480))
もちろん、この関数は常に保存する必要があるため、
すべての作業が完了するようにタイマーの関数に追加する必要があります。以下はテストです。
3. テスト効果
ここではRaspberry Piを使用して接続しています。遅延は大丈夫です。基本的には明らかではありません。効果は次のとおりです。