如何在Qt中将opencv灰度和彩色图像发送到ftp服务器?

时间:2014-04-16 14:58:05

标签: c++ qt opencv qtgui qtnetwork

我想在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);

它适用于我从硬盘读取的文本文件或图像。但我不知道如何使用这种方法将opencv灰度和彩色图像发送到我的RAM上?

我想我必须将我的格式更改为Qbytearray然后发送它,但通过搜索互联网我没有找到任何有用的东西。我只找到this这不适合我的应用程序,它不知何故浪费一些时间来生成该图像,我还需要将我的cv :: mat更改为IplImage ....

由于

2 个答案:

答案 0 :(得分:1)

您可以创建一个包含图像数据的QByteArray(unsigned char * Mat :: data)。然后将原始图像的高度,宽度和通道数(格式)附加到数组中(或将该信息放在QByteArray的前面;或单独发送!)。

服务器将接收QByteArray,然后使用构造函数重建图像:

QImage ( uchar * data, int width, int height, Format format )

答案 1 :(得分:1)

您基本上可以在服务器端使用以下方法:

  

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

     

根据给定二进制数据的第一个大小字节构造一个QImage。加载程序尝试使用指定的格式读取图像。如果未指定format(这是默认值),则加载程序将探测文件以获取标头以猜测文件格式。二进制数据。加载程序尝试使用指定的可选图像格式或通过从数据中确定图像格式来读取图像。

     

如果未指定format(默认值),则加载程序会探测文件以查找标头以确定文件格式。如果指定了format,则它必须是QImageReader :: supportedImageFormats()返回的值之一。

     

如果图像加载失败,则返回的图像将为空图像。

确保正确发送原始数据。另外,请确保Qt实际支持您的图像格式,如下所示:

  

QList QImageReader::supportedImageFormats() [static]

     

返回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
  

通过Qt SVG模块支持读写SVG文件。 Qt Image Formats模块支持其他图像格式。

     

请注意,必须在调用此函数之前创建QApplication实例。