1

Qt 5.2 の QNetworkAccessManager オブジェクトを使用して、OpenCV シングル チャネル イメージ (CV_8UC1) とマルチチャネル イメージ (CV_8UC3) を ftp サーバーに送信したいと考えています。

次のいずれかの形式でデータを送信する QNetworkAccessManager の put メソッドを試しました。

QNetworkReply *put(const QNetworkRequest &request, QIODevice *data);
QNetworkReply *put(const QNetworkRequest &request, const QByteArray &data);
QNetworkReply *put(const QNetworkRequest &request, QHttpMultiPart *multiPart);

ハードディスクから読み取ったテキストファイルまたは画像に対しては正常に機能します。しかし、この方法を使用してRAMにあるopencvグレースケールおよびカラー画像を送信する方法がわかりませんか?

形式を Qbytearray に変更してから送信する必要があると思いますが、インターネットを検索しても有用なものは見つかりませんでした。私のアプリケーションには適していないこれを見つけただけで、その画像を生成するのに時間がかかり、cv::mat を IplImage に変更する必要があります ....

ありがとう

4

2 に答える 2

1

画像データ (unsigned char* Mat::data) を含む QByteArray を作成できます。次に、元の画像の高さ、幅、チャンネル数 (フォーマット) を配列に追加します (または、その情報を QByteArray の前に置くか、個別に送信します!)。

サーバーは QByteArray を受け取り、コンストラクターを使用してイメージを再構築します。

QImage ( uchar * data, int width, int height, Format format )
于 2014-04-16T15:44:32.687 に答える
1

基本的に、サーバー側で次の方法を使用できます。

QImage QImage::fromData(const uchar * data, int size, const char * format = 0) [静的]

指定されたバイナリ データの最初の size バイトから QImage を構築します。ローダーは、指定された形式を使用してイメージを読み取ろうとします。format が指定されていない場合 (デフォルト)、ローダーはファイルのヘッダーを調べてファイル形式を推測します。バイナリデータ。ローダーは、指定されたオプションのイメージ形式を使用するか、データからイメージ形式を判別して、イメージの読み取りを試みます。

format が指定されていない場合 (デフォルト)、ローダーはファイルのヘッダーを調べて、ファイル形式を決定します。フォーマットが指定されている場合、それは QImageReader::supportedImageFormats() によって返される値の 1 つである必要があります。

画像の読み込みに失敗した場合、返される画像は null 画像になります。

生データを適切に送信していることを確認してください。また、次のように、画像形式が実際に Qt でサポートされていることを確認してください。

QList QImageReader::supportedImageFormats() [静的]

QImageReader でサポートされている画像形式のリストを返します。

デフォルトでは、Qt は次の形式を読み取ることができます。

Format  MIME type   Description
BMP image/bmp   Windows Bitmap
GIF image/gif   Graphic Interchange Format (optional)
JPG image/jpeg  Joint Photographic Experts Group
PNG image/png   Portable Network Graphics
PBM image/x-portable-bitmap Portable Bitmap
PGM image/x-portable-graymap    Portable Graymap
PPM image/x-portable-pixmap Portable Pixmap
XBM image/x-xbitmap X11 Bitmap
XPM image/x-xpixmap X11 Pixmap
SVG image/svg+xml   Scalable Vector Graphics

SVG ファイルの読み書きは、Qt SVG モジュールを通じてサポートされています。Qt 画像フォーマット モジュールは、追加の画像フォーマットのサポートを提供します。

この関数を呼び出す前に QApplication インスタンスを作成する必要があることに注意してください。

于 2014-04-17T02:59:14.620 に答える