4

OpenCV C API を使用して Cam から画像をキャプチャし、TCP ソケットを使用して送信しています。

サーバーは C++ (QT) を実行しており、フレームを受信します。

プロセスは正常に機能しており、サーバー上の画像を見ることができます。

奇妙な問題は、両方のプログラムを閉じてクライアントとサーバーを再実行すると、前のテストで見た前のフレームが再び表示されることです。

両方のプログラムをもう一度閉じて再実行すると、2 番目のフレームではなく新しいフレームが表示され、プロセスが続行されます。

より明確にするために:

capture1、close、cap1、close、cap3、close、cap3、close、cap5 ......など

私は前にこのようなものを見たことがありません!

4

3 に答える 3

2

以前も同じ問題がありました。

フレームサイズはかなり大きく、ランダムな方法でバッファから読み取ります(推測だけです)。カメラとOpenCVの間でタイマーまたは確認応答を作成する必要があります。

カメラがフレームをキャプチャする方法を制御してみてください。

于 2013-01-23T13:52:47.897 に答える
1

もちろん、この問題はカメラから来ています。フレームが取得されると、カメラは確認応答を受信する必要があるようです。cap1 が 2 回送信されているかどうかを確認するために、画像を送信するコード行に移動し、画像をディスクに保存してみてください。

于 2013-01-18T08:07:45.993 に答える
1

私はTCP/IPプログラミングやクライアント/サーバーについてあまり知りません...しかし、私が提案できるのは、一般的にカメラ/クライアント/サーバークラスのコンストラクターで、画像を初期化することだけです.

    Mat Frame = Mat::zeros(rows,cols,CV_8UC3);

クライアント/サーバーが初期化されるたびに、またはイメージを交換する準備が整う前に...起動イメージは空白のイメージです...

..を使用して初期化する必要があるcvCreatImage()ため、次のことができます...

IplImage *m = cvCreateImage(cvSize(200,200),8,3);// say its 200 x 200
cvZero(m);
cvShowImage("BLANK",m);
cvvWaitKey();

これは、各ピクセルがゼロの黒い画像を示しています...

于 2013-01-10T05:30:39.877 に答える